Joh*_*nFx 6 sql t-sql insert sql-server-2008 column-defaults
我在一个将行插入表的存储过程中有类似于以下的代码,我想将最后一列(FieldD)设置为@prmSomeValue,除非它是null,否则只需使用为其定义的默认值柱.
IF (@prmSomeValue IS NULL)
INSERT INTO MyTable (fieldA,FieldB,FieldC)
SELECT A,B,C
FROM MyOtherTable
ELSE
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,@prmSomeValue
FROM MyOtherTable
Run Code Online (Sandbox Code Playgroud)
这有效,但违反了DRY原则.我试图用一个插入语句找到一些方法来做到这一点.以下伪代码的行.
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,DEFAULT)
FROM MyOtherTable
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
更新 - 再一次扭曲
默认约束不是文字值,而是如下所示的函数.
...DEFAULT (suser_sname()) FOR [FieldD]
Run Code Online (Sandbox Code Playgroud)
更新
我终于受到了惩罚并选择了较小的邪恶,只是将默认值函数复制到我的查询中,而不是落入为列配置的默认值.我不喜欢它,但它可以在我的查询中减少重复完成工作.
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,suser_sname())
FROM MyOtherTable
Run Code Online (Sandbox Code Playgroud)
由于本质上这就是 SQL Server 正在做的事情,因此您可以执行类似的操作来至少避免两个几乎相同的语句(伪代码):
INSERT (columnA,B,C) ... ;
IF @prmSomeValue IS NOT NULL
UPDATE ... ;
Run Code Online (Sandbox Code Playgroud)
我认为没有办法与默认值合并。