Hledáte pochopení QUOTED_IDENTIFIER
zde pošlu nějaké porozumění.
Krátká verze
ANSI požadovala, aby se kolem identifikátorů (nikoli kolem řetězců) používaly uvozovky. SQL Server podporoval obojí:
SQL Server původně:
SELECT "Hello, world!"
-uvozovkySELECT 'Hello, world!'
--apostrofCREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
ANSI (tj. SET QUOTED_IDENTIFIER ON
):
SELECT "Hello, world!"
--uvozovky již nejsou platné v ANSI kolem řetězcůSELECT 'Hello, world!'
--apostrofCREATE TABLE "The world's most awful table name" ("Hello, world!" int)
SELECT "Hello, world!" FROM "The world's most awful table name"
Dlouhá verze
Původně SQL Server umožňoval používat uvozovky ("..."
) a apostrofy ('...'
) kolem řetězců zaměnitelně (jako to dělá Javascript):
SELECT "Hello, world!"
-uvozovkySELECT 'Hello, world!'
--apostrof
A pokud byste chtěli jmennou tabulku, pohled, proceduru, sloupec atd. s něčím, co by jinak porušovalo všechna pravidla pojmenovávání objektů, můžete to zabalit do hranatých závorek ([
, ]
):
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
A to vše fungovalo a dávalo smysl.
Potom přišla ANSI
Pak přišla ANSI a měla jiné nápady:
- máte-li funky jméno, dejte jej do uvozovek (
"..."
) - použijte apostrof (
'...'
) pro struny - a vaše hranaté závorky nás ani nezajímají
Což znamená, že pokud byste chtěli "citovat" funky název sloupce nebo tabulky, musíte použít uvozovky:
SELECT "Hello, world!" FROM "The world's most awful table name"
Pokud jste znali SQL Server, věděli jste, že uvozovky byly již používány k reprezentaci řetězců. Pokud jste se slepě pokusili spustit tento ANSI-SQL jako by to bylo T-SQL :to je nesmysl a SQL Server vám to řekl:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.
Je to morální ekvivalent pokusu o provedení:
SELECT 'Hello, world!' FROM 'The world''s most awful table name'
Což je jako provedení:
SELECT 'string' FROM 'string'
Musíte se přihlásit k novému chování ANSI
Microsoft tedy přidal funkci, která vám umožní přihlásit se k verzi ANSI SQL.
Původní (nebo QUOTED_IDENTIFIER
vypnuto) :
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
NASTAVIT QUOTED_IDENTIFIER ZAPNUTO :
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
SQL Server vám stále umožňuje používat [square brackets]
místo toho, abyste vás nutili používat "quotation marks"
. Ale se zapnutým QUOTED_IDENTIFIER to nemůžete použijte "double quote quotation mark around strings"
, musíte použít pouze 'the single quote apostrophe'
.