Sql-Server
在 SQL Server 中,檢查約束是在插入的預設約束之前還是之後應用的?
根據標題:在 SQL Server 中,檢查約束是在插入的預設約束之前還是之後應用的?
所以採取下表(為簡潔起見省略了不必要的列)……
CREATE TABLE [dbo].[Customer]( [CountryCode] [varchar](5) NULL CONSTRAINT [CK_Customer_DefaultCountryCode] DEFAULT ([app].[GetUnknownCountryIsoCountryCode]()), ) ON [PRIMARY]
…它還具有以下檢查約束…
ALTER TABLE [admin].[Customer] WITH CHECK ADD CONSTRAINT [CK_CustomerHasCountryWhenIntercompanyBusinessModel] CHECK ( ([app].[BusinessModelMustHaveCountry]([BusinessModelId]) = (1) AND [app].[CheckCountryCodeExists]([CountryCode]) = (1) OR [app].[BusinessModelMustHaveCountry]([BusinessModelId]) <> (1)) ) GO
…是否會在應用檢查約束之前應用預設約束並填充預設值?
之後應用檢查約束。
您可以從以下成功的事實中看出這一點。
DECLARE @T TABLE(X INT DEFAULT 1 CHECK (X = 1)); INSERT @T DEFAULT VALUES;
此外,執行計劃顯示斷言運算符對錶插入運算符的輸出值進行操作,因此正在檢查實際插入的值。