Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 如何在SQLServer2005中为另一个表中的列设置默认值_Sql Server 2005 - Fatal编程技术网

Sql server 2005 如何在SQLServer2005中为另一个表中的列设置默认值

Sql server 2005 如何在SQLServer2005中为另一个表中的列设置默认值,sql-server-2005,Sql Server 2005,在SQL Server 2005中,是否可以通过查询或其他方式为来自另一个表的列设置默认值?是 可以在默认约束中使用标量UDF 然而,对于多行插入,这将是RBAR(“逐行痛苦的行”),触发器可能更有效。我同意Martin的两个观点。因此,如果有人向表中大量导入数据,我使用触发器来避免RBAR的潜在性能损失。在下面的代码中,如果没有为MyColumn提供值,并且我们有一个填充的默认值,我们希望MyTable.MyColumn设置为DefaultSource.DefaultMyColumn。这假设有

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

可以在默认约束中使用标量UDF


然而,对于多行插入,这将是RBAR(“逐行痛苦的行”),触发器可能更有效。

我同意Martin的两个观点。因此,如果有人向表中大量导入数据,我使用触发器来避免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;

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

您能再解释一下您要做什么吗?