Търся разбиране за QUOTED_IDENTIFIER
ще публикувам малко разбиране тук.
Кратка версия
ANSI изисква кавички да се използват около идентификаторите (а не около низовете). SQL Server поддържа и двете:
SQL сървър първоначално:
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'.
Това е морален еквивалент на опит за изпълнение:
SELECT 'Hello, world!' FROM 'The world''s most awful table name'
Което е като изпълнение на:
SELECT 'string' FROM 'string'
Трябва да се включите в новото поведение на ANSI
Така че Microsoft добави функция, която ви позволява да се включите в ANSI вкуса на SQL.
Оригинал (или QUOTED_IDENTIFIER
изключен) :
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
ЗАДАДЕТЕ QUOTED_IDENTIFIER ВКЛЮЧЕНО :
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
SQL Server все още ви позволява да използвате [square brackets]
, вместо да ви налага да използвате "quotation marks"
. Но с ВКЛЮЧЕН QUOTED_IDENTIFIER не можете използвайте "double quote quotation mark around strings"
, трябва да използвате само 'the single quote apostrophe'
.