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)
...是否会应用默认约束并在应用检查约束之前填充默认值?
之后应用检查约束。
您可以从以下成功的事实中看出这一点。
DECLARE @T TABLE(X INT DEFAULT 1 CHECK (X = 1));
INSERT @T DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)
此外,执行计划显示断言运算符对表插入运算符的输出值进行操作,因此正在检查实际插入的值。