4
我想在存儲過程插入中使用該列的默認值,這樣我就不必在多個地方重複默認值(它可能會更改... DRY原則)。TSQL從Case語句插入列默認值
的T-SQL INSERT操作有,我可以用如下一個方便的「默認」關鍵字:
Declare @newA varchar(10)
Set @newA = 'Foo2'
-- I can use "default" like so...
Insert into Table_1 (
A,
B)
Values (
@newA,
default)
但是,如果我需要做一些有條件的,我似乎無法得到的情況下語句返回'默認'。
-- How do I use 'default' in a case statement?
INSERT INTO Table_1 (
A,
B)
VALUES (
@newA,
CASE WHEN (@newA <> 'Foo2') THEN 'bar' ELSE default END)
-- > yeilds "Incorrect syntax near the keyword 'default'."
我可以插入默認,然後根據需要像這樣更新:
INSERT INTO Table_1 (
A,
B)
VALUES (
@newA,
default)
UPDATE Table_1
SET B = CASE WHEN (A <> 'Foo2') THEN 'bar' ELSE B END
WHERE ID = SCOPE_IDENTITY()
但我真的希望有人告訴我「有一個更好的辦法......」
下面是這個例子的表定義,如果它可以幫助...
CREATE TABLE dbo.Table_1 (
ID int NOT NULL IDENTITY (1, 1),
A varchar(10) NULL,
B varchar(10) NULL )
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT DF_Table_1_A DEFAULT 'A-Def' FOR A
GO
ALTER TABLE dbo.Table_1 ADD CONSTRAINT DF_Table_1_B DEFAULT 'B-Def' FOR B
GO
所以基本上我必須提前將其分開...至少只有一個插入/更新,我不必重複自己的默認值... – DanO
我對SQL團隊感到失望CASE語句的result_expression不能指定等同於'default'的值!或者它可能是插入語句不能很好地處理語法。 – DanO
@DanO它似乎是一個DEFAULT的限制,只能在VALUES()內根據[** INSERT文檔**](http://msdn.microsoft.com/zh-cn/library/ms174335.aspx) –