我已經做了大量的搜索和測試,但我似乎無法找到這樣的例子,或者讓我的任何測試工作。防止寫入NULL或空白到字段
我有許多字段的表,他們開始爲NULL(意味着數據未知),並且當他們獲取數據時,數據永遠不會是空字符串。一些反覆更新數據以反映快照的更新腳本非常複雜,有時會用NULL或空白值覆蓋值。這些腳本超出了我們現在能夠真正修復的能力,所以我想採取另一種方法,並且在那裏已經有數據時阻止對具有NULL或空白的字段進行更新。
我已經做了大量的搜索和測試,但我似乎無法找到這樣的例子,或者讓我的任何測試工作。防止寫入NULL或空白到字段
我有許多字段的表,他們開始爲NULL(意味着數據未知),並且當他們獲取數據時,數據永遠不會是空字符串。一些反覆更新數據以反映快照的更新腳本非常複雜,有時會用NULL或空白值覆蓋值。這些腳本超出了我們現在能夠真正修復的能力,所以我想採取另一種方法,並且在那裏已經有數據時阻止對具有NULL或空白的字段進行更新。
我在使用MySQL之前就已經做過這種事情,但從來沒有使用過SQL Server,所以我的語法可能會稍微偏離。基本的要點是你在表上設置了一個觸發器,並且在更新發生後,它在所有被刪除的行上運行UPDATE-JOIN(更新涉及DELETE和INSERT)。 deleted
表是與我們可以用來獲取舊值的觸發器相關的特殊對象。如果nullColumn
中的舊值爲NULL
,則觸發器會將新值設置爲NULL
,並丟棄可能已做出的任何更改。
CREATE TRIGGER nullKeep
ON nullTable
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE a
SET
nullColumn1 = CASE WHEN b.nullColumn1 IS NULL THEN NULL ELSE a.nullColumn1 END
, nullColumn2 = CASE WHEN b.nullColumn2 IS NULL THEN NULL ELSE a.nullColumn2 END
, nullColumn3 = CASE WHEN b.nullColumn3 IS NULL THEN NULL ELSE a.nullColumn3 END
/* ...repeat for as many columns as you need... */
FROM
nullTable a
INNER JOIN
deleted b
ON a.ID = b.ID
END
GO
如何爲一個表的每一列? (可以有幾十個) –
查看可以在多列上使用的解決方案的更新答案。 – Mikuana
設置觸發器來檢查值是否更新爲空或空白字符串並將其停止。 – dfundako