我有一個列的默認值爲0的表。但是,當將null插入到此表中時,我希望它將其設置爲默認值。將該列的值設置爲NULL值的默認值
由於插入查詢是通用的,並且也被其他數據庫使用,所以我無法對插入語句進行任何更改。
我可以在create table上使用約束條件或case語句,以便在傳遞null時插入默認值0。
我有一個列的默認值爲0的表。但是,當將null插入到此表中時,我希望它將其設置爲默認值。將該列的值設置爲NULL值的默認值
由於插入查詢是通用的,並且也被其他數據庫使用,所以我無法對插入語句進行任何更改。
我可以在create table上使用約束條件或case語句,以便在傳遞null時插入默認值0。
如果你不能改變一個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
@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
您可以在插入時使用觸發器進行更新。
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
插入null與插入特定值相同,因此默認值被繞過。
要使用默認設置,insert語句不應該向此列中插入任何內容。
如果您無法在into語句的select位中使用Coalesce(value,0),請嘗試在您的選擇查詢中使用它來掩蓋結果。
提供你的表結構 –
跳跳虎可以幫助你在這裏 –
你問在StackExchange這個同樣的問題,有觸發答案有:http://dba.stackexchange.com/questions/105207/how-to-set-default-value-of-column-0-when-null-is-inserted。這不能用默認約束來完成。 –