这个表情变化过程是什么?

Jos*_*ell 5 sql-server terminology

考虑这个表定义:

CREATE TABLE [dbo].[Post]
(
    [Id] INT IDENTITY(1,1) NOT NULL,
    [PostType] VARCHAR(10) NOT NULL,

    CONSTRAINT [CK_Post_PostType] CHECK ([PostType] IN ('Question', 'Answer', 'Comment'))
)
Run Code Online (Sandbox Code Playgroud)

如果我运行它然后查看sys.check_constraints

select [definition] 
from sys.check_constraints
where [name] = 'CK_Post_PostType';
Run Code Online (Sandbox Code Playgroud)

这是输出:

([PostType]='Comment' OR [PostType]='Answer' OR [PostType]='Question')
Run Code Online (Sandbox Code Playgroud)

所以它将我的“in”语句改为一系列“或”语句。

同样的事情也是如此(至少)

  • BETWEEN(更改为OR语句)和
  • CAST(变为CONVERT)。

我意识到这不是 SQL Server 中的功能问题,因为表达式在逻辑上是等效的。但它会导致 SSDT 等模式比较工具出现问题,因为源代码与部署的代码不同步。我在博客上更详细地介绍了这个问题:SSDT 问题:一遍又一遍地部署相同的更改

这个转换过程/行为有名称吗?是否有可能发生的不同转换的任何文档,以便我们可以为它们计划(或尝试避免它们)?

小智 6

广义上,这被称为标准化归一化

这方面的例子包括(对于表达式)Conjunctive Normal FormDisjunctive Normal Form

我所知道的 Microsoft 文档中没有列出所涉及的多个流程的所有步骤。本质上,SQL Server 将事物转换为标准格式,使其在内部更容易使用。这发生在不同的时间,包括在解析期间,以及查询编译和优化的规范化阶段。

CASTvsCONVERT而言,它可能只是CONVERT第一个(和/或因为它提供了功能的超集)。您应该会发现内置(内部)函数通常是首选。