星期二, 2月 27, 2024

[Azure] Branch Policies

閱讀大神 YT 影片 PR 觀念教學和 Branch policies and settings 內學習到,可以透過設定 Branch Policies 來強制使用 PR 進行該分支變更且提供四種設定方式,如下圖所示


確認各 policy 使用情境後,Check for linked work items 看起來是最適合我們的情況,現況發 PR 就都會連結 work Items


另外即使設定好 policy 後,也可以在 Branch Security 內設定例外名單,pass 該 ploicy 設定


實際測試


星期六, 2月 24, 2024

[EF] 在模型中包含外部索引鍵資料行

修改 edmx entity 後,出現下面錯誤訊息,中英文都記錄下來
Error 3007: 
Problem in mapping fragments starting at lines 686, 735: 
Column(s) [欄位名稱] are being mapped in both fragments to different conceptual side properties.

錯誤 3007:
對應片段中從第 686, 735 行開始有問題:
資料行 [欄位名稱] 在兩個片段中同時對應至不同的概念端屬性。
查詢發現以往操作 edmx 時預設會勾選選項-[在模型中包含外部索引鍵資料行] 被取消掉,重新勾選後就恢復正常

星期五, 2月 23, 2024

[SQL] 分析函數應用 - 找出最小值

公司內某流水號商業邏輯,需要找到最小流水號加一當成新的流水號使用,但因為混雜太多規則,最後是採用 Lead() 來達到需求

Sample Code 如下,邏輯是透過 Lead() 找到該筆資料下一筆後,兩者相減大於一後,全部資料最小值,即為目前流水號最小值,以 Sample Data 來看是 0003
DECLARE @Temp TABLE ([NO] char(5))
INSERT INTO @Temp ([NO]) VALUES('0001')
INSERT INTO @Temp ([NO]) VALUES('0002')
INSERT INTO @Temp ([NO]) VALUES('0003')
INSERT INTO @Temp ([NO]) VALUES('1001')
INSERT INTO @Temp ([NO]) VALUES('1002')
INSERT INTO @Temp ([NO]) VALUES('8100')
INSERT INTO @Temp ([NO]) VALUES('8101')
INSERT INTO @Temp ([NO]) VALUES('8102')
INSERT INTO @Temp ([NO]) VALUES('A0012')
INSERT INTO @Temp ([NO]) VALUES('B0034')
INSERT INTO @Temp ([NO]) VALUES('M123')


SELECT 
	MIN([current]) AS GapMinNO
FROM
	(
		SELECT 
			[NO] AS [current],
			LEAD([NO]) OVER (ORDER BY [NO]) AS [next]
		FROM @Temp
		WHERE Try_Cast([NO] as int) IS NOT NULL
	) AS T
WHERE CAST([next] as int) - CAST([current] as int) > 1

星期日, 2月 18, 2024

[C#] 移除 ICON

要移除 WinForm Form 上的 ICON 時,發現沒有這麼直覺

WinForm (.NET Framework 或是 .NET 8) 上都可以在 Form Title Bar 上設定 ICON


IDE 上設定 ICON 是在屬性視窗的 ICON 選項上設定,但設定完成後沒有辦法移除,只能置換為其他 ICON 而已


最後只能在 designer 內直接把 ICON 屬性刪除,來達到移除 ICON 設定的目的

星期六, 2月 10, 2024

[C#] using 別名

系統內正在進行不同 ORM 更換,但為維持辨識慣例,仍會維持相同的 Model 名稱,且有時候功能多沒有辦法一口氣改寫上線,導致不同 ORM Model 都必須可以正常運作,在 C# 2.0 就有 using 別名功能,可以在單一介面上設定別名,下述為簡易範例
using EFModel = EntityFramework.Model
using SqlSugarModel = SqlSugar.Model
設定別名做法可以方便指定整個介面使用那一個 ORM Model

星期四, 2月 08, 2024

[SQL] 移除 identity

遇上需要把 identity 移除情境,在 ALTER TABLE ddl 語法內竟然找不到相關語法,使用 [SSMS] 產生變更指令碼 確認 ddl 語法,發現竟然是跑該流程
  1. 建立暫存 table
  2. 把資料 insert 進暫存 table
  3. 刪除原 table
  4. 把暫存 table 更名為原 table 名稱
  5. 建立叢集索引
產生變更指令碼如下
use AdventureWorks2022
go 

/* 為了避免任何可能發生資料遺失的問題,您應該先詳細檢視此指令碼,然後才能在資料庫設計工具環境以外的位置執行。*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_tblRemoveIdentity
	(
	ID int NOT NULL
	)  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_tblRemoveIdentity SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.tblRemoveIdentity)
	 EXEC('INSERT INTO dbo.Tmp_tblRemoveIdentity (ID)
		SELECT ID FROM dbo.tblRemoveIdentity WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.tblRemoveIdentity
GO
EXECUTE sp_rename N'dbo.Tmp_tblRemoveIdentity', N'tblRemoveIdentity', 'OBJECT' 
GO
ALTER TABLE dbo.tblRemoveIdentity ADD CONSTRAINT
	PK_tblRemoveIdentity PRIMARY KEY CLUSTERED 
	(
	ID
	) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT

Google 後也發現都是採取該流程來移除 identity 

星期三, 2月 07, 2024

[VS] 偵錯 - Store Procedure

SSMS V18 把原本 SSMS V17 偵錯功能移除,官方文件 - 執行 Transact-SQL 偵錯工具 內有說明


現況要針對 Store Procedure 來進行偵錯的話,可以使用 VS 2022 來進行,該筆記建立三隻 SP 並形成巢狀執行,sp1 內執行 sp2、sp2 內執行 sp3,以下為操作步驟

在 [伺服器總總管] 內針對目標 SP 按滑鼠右鍵並點選執行


點選中斷點(圖片左方的小紅點)


點選 [使用偵測工具執行]


偵錯流程,下圖就是一直按 F11 執行而已