2011-09-04 73 views

回答

1

是的。

您可以在默認約束中使用標量UDF。

對於多行插入,這將是RBAR(「通過Agonizing Row排」),但觸發器可能更有效。

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; 

不要嘗試直接更新插入的特殊表,而是更新觸發器的基表。

相關問題