В поисках понимания QUOTED_IDENTIFIER
я опубликую здесь некоторое понимание.
Короткая версия
ANSI потребовала использовать кавычки вокруг идентификаторов (не вокруг строк).SQL Server поддерживает оба:
SQL Server первоначально:
SELECT "Hello, world!"
- кавычка SELECT 'Hello, world!'
- апостроф CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
ANSI (т. Е. SET QUOTED_IDENTIFIER ON
):
SELECT "Hello, world!"
- кавычка больше не действует в ANSI вокруг строк SELECT 'Hello, world!'
--апостроф CREATE TABLE "The world's most awful table name" ("Hello, world!" int)
SELECT "Hello, world!" FROM "The world's most awful table name"
Старые времена
Изначально SQL Server разрешал использовать кавычки ("..."
) и апострофы ('...'
) вокруг строк взаимозаменяемо (как это делает Javascript):
SELECT "Hello, world!"
-кавычка SELECT 'Hello, world!'
- апостроф
А если вам нужна таблица имен, представление, процедура, столбец и т. д. с чем-то, чтов противном случае нарушите все правила именования объектов, вы можете заключить его в квадратных скобок ([
, ]
):
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
И все это сработало и имело смысл.
Затем появился ANSI
Затем появился ANSI и пришел к другим идеям:
- , если у вас есть забавное имяоберните его в кавычки (
"..."
) - используйте апостроф (
'...'
) для строк - и мы даже непозаботьтесь о своих квадратных скобках
Это означает, что если вы хотите "заключить в кавычки" напуганный столбец или имя таблицы, вы должны использовать кавычки:
SELECT "Hello, world!" FROM "The world's most awful table name"
Если вы знали SQL Server, вы знали, что кавычки уже использовались для представления строк.Если вы слепо пытались выполнить ANSI-SQL , как если бы это было T-SQL : это чепуха, и SQL Server сказал вам следующее:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.
Youдолжен подключиться к новому поведению ANSI
Поэтому Microsoft добавила функцию, позволяющую подключаться к варианту ANSI SQL.
Оригинал
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
SET QUOTED_IDENTIFIER ON
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
SQL Server по-прежнему позволяет использовать [square brackets]
вместо принудительного использования "quotatio marks"
.Но с включенным QUOTED_IDENTIFIER вы не можете использовать "double quote quotation mark around strings"
, вы должны использовать только 'the single quote apostrophe'
.