如何从SQL Server 2005中的另一个表设置列的默认值

时间:2011-09-04 07:40:27

标签: sql-server-2005

在SQL Server 2005中是否可以通过查询或其他东西为来自另一个表的列设置默认值?

2 个答案:

答案 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;

不要尝试直接更新插入的特殊表,而是更新触发器的基表。