在SQL Server 2005中是否可以通过查询或其他东西为来自另一个表的列设置默认值?
答案 0 :(得分:1)
是。
您可以在默认约束中使用标量UDF。
对于多行插入,这将是RBAR(“通过Agonizing Row行”),并且触发器可能更有效。
答案 1 :(得分:0)
我同意马丁的观点。因此,我使用触发器来避免RBAR的潜在性能损失,以防有人将数据大量导入表中。在下面的代码中,如果没有为MyColumn提供任何值,我们希望将MyTable.MyColumn设置为DefaultSource.DefaultMyColumn,并且我们有一个填充的默认值。这假定存在MyTable.DefaultId(最好带有外键),因此我们可以从DefaultSource中的正确行获取默认值。
CREATE TRIGGER [dbo].[TR_MyTable_AI_Default]
ON [dbo].[MyTable]
AFTER INSERT
AS
SET NOCOUNT ON;
UPDATE m
SET [MyColumn] = ds.[DefaultMyColumn]
FROM inserted i
JOIN [dbo].[MyTable] m ON i.[PrimaryKey] = m.[PrimaryKey]
JOIN [dbo].[DefaultSource] ds ON i.[DefaultId] = ds.[DefaultId]
WHERE a.[MyColumn] IS NULL
AND df.[DefaultMyColumn] IS NOT NULL;
不要尝试直接更新插入的特殊表,而是更新触发器的基表。