2016-08-17 60 views
-2

我已經做了大量的搜索和測試,但我似乎無法找到這樣的例子,或者讓我的任何測試工作。防止寫入NULL或空白到字段

我有許多字段的表,他們開始爲NULL(意味着數據未知),並且當他們獲取數據時,數據永遠不會是空字符串。一些反覆更新數據以反映快照的更新腳本非常複雜,有時會用NULL或空白值覆蓋值。這些腳本超出了我們現在能夠真正修復的能力,所以我想採取另一種方法,並且在那裏已經有數據時阻止對具有NULL或空白的字段進行更新。

+0

設置觸發器來檢查值是否更新爲空或空白字符串並將其停止。 – dfundako

回答

1

我在使用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 
+0

如何爲一個表的每一列? (可以有幾十個) –

+0

查看可以在多列上使用的解決方案的更新答案。 – Mikuana