在 SQL Server 中,是否在插入的默认约束之前或之后应用了检查约束?

Dib*_*Dib 5 sql-server constraint default-value check-constraints

根据标题:在 SQL Server 中,是否在插入的默认约束之前或之后应用了检查约束?

所以采用下表(为简洁起见省略了不必要的列)......

CREATE TABLE [dbo].[Customer](
    [CountryCode] [varchar](5) NULL CONSTRAINT [CK_Customer_DefaultCountryCode]  DEFAULT ([app].[GetUnknownCountryIsoCountryCode]()),
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

...还有以下检查约束...

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
Run Code Online (Sandbox Code Playgroud)

...是否会应用默认约束并在应用检查约束之前填充默认值?

Mar*_*ith 9

之后应用检查约束。

您可以从以下成功的事实中看出这一点。

DECLARE @T TABLE(X INT DEFAULT 1 CHECK (X = 1)); 

INSERT @T DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)

此外,执行计划显示断言运算符对表插入运算符的输出值进行操作,因此正在检查实际插入的值。

在此处输入图片说明