2017-03-07 95 views
0

我有一張表,我想將其兩列的默認值設置爲相同的值。我正在使用一個生成唯一值的SQL函數。我可以很容易地設置列一個列默認足夠使用功能:使用SQL函數的返回值作爲多列的默認值?

[PreCode] NVARCHAR(20) NOT NULL DEFAULT([dbo].GetPreCode()), 

但我將如何使用我的其他列相同的值?我假設,如果我使用與上述相同的語法來爲其他列創建另一個唯一值而不是使用爲第一列生成的值的函數。我怎樣才能讓這兩列具有相同的默認值,從一次調用SQL函數?

+1

如果該函數的目的是在每次被調用時生成一個唯一值,那麼您如何期望返回多個調用的_same_值? –

+0

你不能。您無法將任何上下文傳遞給函數關於您要爲其生成數據的哪一行,如果您希望該函數在單行中返回相同的值,則這是一項艱難的要求。如果你確定只有一行被插入,你可以在函數中做一些像'sys.dm_tran_current_transaction'這樣的密碼,但是在執行實際插入的代碼中這樣做可能更爲理智,一個存儲過程,或者使用'AFTER INSERT'觸發器。 –

+2

使用INSTEAD OF INSERT觸發器並將其設置爲安靜 – McNets

回答

1

您可以使用INSTEAD OF INSERT觸發器來設置它,或者可以讓第二列爲計算列並將值設置爲第一列。

您可以嘗試將第二列默認值設置爲第一列的值,但我不確定是否在第二列設置之前等待第一個設置,或者是否將它設置爲NULL然後將值應用於第一個值。