2015-06-26 193 views
0

我有一個列的默認值爲0的表。但是,當將null插入到此表中時,我希望它將其設置爲默認值。將該列的值設置爲NULL值的默認值

由於插入查詢是通用的,並且也被其他數據庫使用,所以我無法對插入語句進行任何更改。

我可以在create table上使用約束條件或case語句,以便在傳遞null時插入默認值0。

+0

提供你的表結構 –

+0

跳跳虎可以幫助你在這裏 –

+0

你問在StackExchange這個同樣的問題,有觸發答案有:http://dba.stackexchange.com/questions/105207/how-to-set-default-value-of-column-0-when-null-is-inserted。這不能用默認約束來完成。 –

回答

3

如果你不能改變一個insert statement你沒有辦法等,然後創建一個instead of insert trigger

CREATE TRIGGER trTableName 
ON SchemaName.TableName 
INSTEAD OF INSERT 
AS 
BEGIN 

    INSERT INTO TableName (ColumnA, ColumnB, ...) 
    SELECT ISNULL(ColumnA, 0), ISNULL(ColumnB, 0), ... 
    FROM INSERTED 

END 
+0

@azim - 提示:有關'COALESCE'和'ISNULL'的良好信息在MSDN Blogs [here](http://blogs.msdn.com/b/sqltips/archive/2008/06/26 /differences-between-isnull-and-coalesce.aspx)。我傾向於使用'COALESCE',因爲它在ANSI SQL標準中並且支持兩個以上的參數。 – HABO

3

您可以在插入時使用觸發器進行更新。

CREATE TRIGGER [dbo].[YourTriggerName] 
    ON [dbo].[YourTable] 
    AFTER INSERT 
AS 
BEGIN 
     UPDATE t SET YourCol = 0 
     FROM YourTable t 
      JOIN Inserted i ON t.Id = i.Id 
     WHERE i.YourCol IS NULL 
END 
1

插入null與插入特定值相同,因此默認值被繞過。
要使用默認設置,insert語句不應該向此列中插入任何內容。

如果您無法在into語句的select位中使用Coalesce(value,0),請嘗試在您的選擇查詢中使用它來掩蓋結果。