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.