我在将行插入表中的存储过程中有类似于以下的代码,我想将最后一列(FieldD)设置为@prmSomeValue,除非它为空,否则只需使用为此定义的默认值柱子。
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
这可行,但违反了 DRY 原则。我正在尝试使用单个插入语句找到一些方法来做到这一点。类似于以下伪代码的内容。
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,DEFAULT)
FROM MyOtherTable
有人有想法么?
更新 - 另一个转折
默认约束不是文字值,而是如下所示的函数。
...DEFAULT (suser_sname()) FOR [FieldD]
更新
我终于下注并选择了较小的弊端,只是将默认值函数复制到我的查询中,而不是使用为列配置的默认值。我不喜欢它,但它可以在我的查询中减少重复次数。
INSERT INTO MyTable (fieldA,FieldB,FieldC,FieldD)
SELECT A,B,C,ISNULL(@prmSomeValue,suser_sname())
FROM MyOtherTable