De acordo com o título: No servidor SQL, uma restrição de verificação é aplicada antes ou depois de uma restrição padrão na inserção?
Então, pegando a tabela a seguir (colunas desnecessárias omitidas por brevidade)...
CREATE TABLE [dbo].[Customer](
[CountryCode] [varchar](5) NULL CONSTRAINT [CK_Customer_DefaultCountryCode] DEFAULT ([app].[GetUnknownCountryIsoCountryCode]()),
) ON [PRIMARY]
...Que também tem a seguinte restrição de verificação...
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
... a restrição padrão será aplicada e preencherá o valor padrão antes que a restrição de verificação seja aplicada?
A restrição de verificação é aplicada depois.
Você pode ver isso pelo fato de que o seguinte é bem-sucedido.
Além disso, o plano de execução mostra que o operador assert opera na saída de valores do operador de inserção de tabela, verificando os valores que foram realmente inseridos.