Eva*_*oll -5 sql-server linux configuration
SQL Server 中有一个非常令人讨厌的功能QUOTED_IDENTIFIERS
,我想了解更多。简而言之,将选项设置为ON
,这不是 Linux 客户端的默认设置,一切正常。没有它,有些事情会神奇地失败。Microsoft 声称该选项是DEFAULT
,然后他们在自己的默认客户端中默认更改它。随着SET QUOTED_IDENTIFIERS OFF;
,这有效,
CREATE TABLE f (
a int,
b int,
g AS (CASE WHEN a>b THEN a ELSE b END),
l AS (CASE WHEN a>b THEN b ELSE a END),
UNIQUE(a,b)
);
Run Code Online (Sandbox Code Playgroud)
有了SET QUOTED_IDENTIFIERS OFF;
,这并不能正常工作,
CREATE TABLE f (
a int,
b int,
g AS (CASE WHEN a>b THEN a ELSE b END),
l AS (CASE WHEN a>b THEN b ELSE a END),
UNIQUE(g,l)
);
Run Code Online (Sandbox Code Playgroud)
我只是想知道如何g
以及比andl
更像是一个标识符,以及如何不支持这种语法,除非客户端启用是一个好主意或明智的主意?这个选项到底在做什么?a
b
我只是问,因为现在我被这个咬了两次,
计算列上的索引视图或索引是通过 TSQL 表达式与表行相关的表索引。因此,在更改表时,SQL 必须确定更改是否还需要更改索引视图或计算列上的索引。
为了使这更容易,SQL Server 一直要求特定的 SET 选项对进行更改的会话处于活动状态。在这种情况下,带引号的标识符有助于确定计算列是否受 DML 语句影响,因为表达式“a”将引用列 a,而不是字符串值。
这个要求没有根本原因,但规范化 SET 选项可以使实现更简单,并且符合更广泛的愿望,即在应用程序中促进单一、标准的会话设置集。
SQLCMD 将带引号的标识符默认为 off,要么是为了向后兼容,要么是为了与脚本环境兼容,或者可能没有充分的理由。
归档时间: |
|
查看次数: |
99 次 |
最近记录: |