我正在將Access數據庫遷移到SQL Server 2014 Express後端,並且應用程序按原樣設計爲在某些表中的某些列中放置空字符串,而不是NULL (訪問在附加表單上的行爲)。SQL Server觸發器將NULL更改爲空字符串
原來我不能,因爲當通過連接到綁定的形式表不允許在這些列空ODBC連接表顯式訪問時試圖插入NULL值,當有人簡單地刪除列的內容,甚至如果我有一個默認值在表中定義。
我想先說一下,我將解決這個問題以正確處理NULL,但對於'現在',我的優先考慮是將後端轉換爲與Access中操作相同的SQL,所以我只想要一個觸發器將幾個字段上的NULL值更改爲空字符串,直到我可以查看所有期望這些字段中的空字符串並將其更改爲處理NULL的應用程序邏輯。
我想出了以下內容:
CREATE TRIGGER TABLE1_ReplaceNulls
ON TABLE1
AFTER INSERT, UPDATE
AS
IF UPDATE(FIELDWNULL1)
BEGIN
UPDATE TABLE1
SET FIELDWNULL1 = ''
FROM inserted I
INNER JOIN TABLE1 ON I.PKFIELD = TABLE1.PKFIELD
WHERE I.FIELDWNULL1 IS NULL;
END;
這工作得很好了一列。對於同一個表中的多個列,我最好如何做到這一點?我有一個包含4列的表,它們都可以包含NULLS,但是我想要空字符串來代替它們。
我應該爲每個可能包含NULL的列做一個單獨的IF塊嗎?或者只是一次處理它?當然,如果我一次處理它,我將不得不考慮一些列可能具有合法值,但是如果我執行單獨的語句,那麼它可以在插入列後實質上運行4次更新。也許這並不重要,因爲這只是暫時的,但只是對其他更有經驗的想法感到好奇。
Access只把空字符串,如果這樣設計的。作爲在整個申請中採用標準來存儲空值的一般規則是優選的。如果Access表設計遵循此標準,則遷移到SQL服務器將是無縫的。如果Access表設計不允許ZLS,那麼清空Access窗體中的文本框將導致表中的空值。因此,將這些應用程序遷移到SQL Server將繼續工作,而不會更改VBA代碼。清空文本框將在SQL Server和Access中保存爲空。一個人應該避免混合使用ZLS和空值 –