mssql中引号和双引号有什么区别

1 sql-server quotes

例如,这两种表达方式有区别吗?

Select [column] as 'column1' from [table]
Run Code Online (Sandbox Code Playgroud)
Select [column] as "column1" from [table]
Run Code Online (Sandbox Code Playgroud)

use*_*983 6

单引号用于文字字符串。双引号是对象名称的 ANSI SQL 分隔标识符(T-SQL 的分隔标识符是方括号 ( []))。

不过,不要对'别名使用单引号 ( ),因为(如前所述)单引号用于文字字符串,而不是分隔标识对象名称。单引号仅在定义别名时用作别名的分隔标识符,在其他地方不起作用。这意味着您很容易让那些刚接触该语言的人感到困惑(如果您的格式很差,甚至那些已经使用该语言多年的人)。

例如,ORDER BY 'column1'不会按别名为 的列排序'column1',而是按varchar文字排序'column1';实际上,您的数据根本不会排序,并且会以任意顺序返回(因为每一行的排序值都相同)。同样,下面的第一个语句不会返回任何行,第二个语句会出错:

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;
Run Code Online (Sandbox Code Playgroud)

第一个不会返回任何行,因为文字varchar值永远'Column1'不会是。第二个会出错,因为虽然该列已被别名为,并且它的名称表明它是一个列,但外部会尝试将文字值转换为, 并且(显然)这是行不通的。LIKE 'ID%''Column1'intSELECTvarchar'Column1'int

此外,一些带有文字字符串别名的语法已被弃用(特别是'string_alias' = expression)。

坚持使用不需要分隔识别的对象和别名,如果必须分隔识别它们,请使用 T-SQL 标识符、方括号 ( []) 或 ANSI-SQL 的双引号 ( ")。column1不需要识别,所以你应该定义 is as column1。