mssql中的引号和双引号有什么区别
What is the difference between quote and double quote in mssql
例如这两个表达式有区别吗?
Select [column] as 'column1' from [table]
Select [column] as "column1" from [table]
单引号用于文字字符串。双引号是对象名称的 ANSI SQL 定界标识符(T-SQL 的定界标识符是括号 ([]
))。
不要对别名使用单引号 ('
),因为(如前所述)单引号用于文字字符串,而不是分隔标识对象名称。当您定义所述别名时,单引号仅用作别名的定界标识符,其他地方则不行。这意味着您很容易混淆那些刚接触该语言的人(如果您的格式很差,甚至那些已经使用它多年的人)。
例如,ORDER BY 'column1'
不会 按别名为 'column1'
的列排序,它会按 varchar
文字 'column1'
;实际上,您的数据根本不会被排序,并且会以任意顺序 returned(因为每一行都具有相同的排序值)。同样明智的是,在下面的第一个语句中 return 没有行,第二个语句会出错:
SELECT 'Column1'
FROM (SELECT [Column] + '_suffix' AS Column1
FROM dbo.MyTable) MT
WHERE 'Column1' LIKE 'ID%';
GO
SELECT 'Column1' + 2
FROM (SELECT [SomeIntColumn] AS 'Column1'
FROM dbo.MyTable) MT;
第一个 return 没有行,因为文字 varchar
值 'Column1'
将 永远不会 是 LIKE 'ID%'
。第二个会出错,因为虽然该列已被别名为 'Column1'
,并且它的名称表明它是一个 int
列,但外部 SELECT
会尝试转换文字 varchar
值'Column1'
到 int
,并且(显然)那是行不通的。
还弃用了一些带有文字字符串别名的语法(特别是 'string_alias' = expression
)。
坚持使用不需要分隔标识的对象和别名,如果您必须分隔标识它们,请使用T-SQL标识符,方括号([]
) 或 ANSI-SQL 的双引号 ("
)。 column1
不需要识别,所以你应该定义为 column1
.
例如这两个表达式有区别吗?
Select [column] as 'column1' from [table]
Select [column] as "column1" from [table]
单引号用于文字字符串。双引号是对象名称的 ANSI SQL 定界标识符(T-SQL 的定界标识符是括号 ([]
))。
不要对别名使用单引号 ('
),因为(如前所述)单引号用于文字字符串,而不是分隔标识对象名称。当您定义所述别名时,单引号仅用作别名的定界标识符,其他地方则不行。这意味着您很容易混淆那些刚接触该语言的人(如果您的格式很差,甚至那些已经使用它多年的人)。
例如,ORDER BY 'column1'
不会 按别名为 'column1'
的列排序,它会按 varchar
文字 'column1'
;实际上,您的数据根本不会被排序,并且会以任意顺序 returned(因为每一行都具有相同的排序值)。同样明智的是,在下面的第一个语句中 return 没有行,第二个语句会出错:
SELECT 'Column1'
FROM (SELECT [Column] + '_suffix' AS Column1
FROM dbo.MyTable) MT
WHERE 'Column1' LIKE 'ID%';
GO
SELECT 'Column1' + 2
FROM (SELECT [SomeIntColumn] AS 'Column1'
FROM dbo.MyTable) MT;
第一个 return 没有行,因为文字 varchar
值 'Column1'
将 永远不会 是 LIKE 'ID%'
。第二个会出错,因为虽然该列已被别名为 'Column1'
,并且它的名称表明它是一个 int
列,但外部 SELECT
会尝试转换文字 varchar
值'Column1'
到 int
,并且(显然)那是行不通的。
还弃用了一些带有文字字符串别名的语法(特别是 'string_alias' = expression
)。
坚持使用不需要分隔标识的对象和别名,如果您必须分隔标识它们,请使用T-SQL标识符,方括号([]
) 或 ANSI-SQL 的双引号 ("
)。 column1
不需要识别,所以你应该定义为 column1
.