ストアドプロシージャの挿入で列のデフォルト値を使用したいので、複数の場所でデフォルト値を繰り返す必要はありません(変更される可能性があります... DRYの原則)。
T-SQL INSERT操作には、次のように使用できる便利な「default」キーワードがあります。
Declare @newA varchar(10)
Set @newA = 'Foo2'
-- I can use "default" like so...
Insert into Table_1 (
A,
B)
Values (
@newA,
default)
ただし、条件付きで何かを行う必要がある場合、caseステートメントで「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