Op zoek naar inzicht in QUOTED_IDENTIFIER
ik zal hier wat begrip posten.
Korte versie
ANSI eiste dat aanhalingstekens worden gebruikt rond identifiers (niet rond strings). SQL Server ondersteunde beide:
SQL-server oorspronkelijk:
SELECT "Hello, world!"
--aanhalingstekenSELECT '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 (d.w.z. SET QUOTED_IDENTIFIER ON
):
SELECT "Hello, world!"
--aanhalingsteken niet langer geldig in ANSI rond stringsSELECT '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"
Lange versie
Oorspronkelijk stond SQL Server u toe om aanhalingstekens te gebruiken ("..."
) en apostrofs ('...'
) rond strings door elkaar (zoals Javascript doet):
SELECT "Hello, world!"
--aanhalingstekenSELECT 'Hello, world!'
--apostrof
En als u een naamtabel, weergave, procedure, kolom enz. wilde hebben met iets dat anders alle regels voor het benoemen van objecten zou schenden, dan zou u het tussen vierkante haken kunnen plaatsen ([
, ]
):
CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]
En dat werkte allemaal en was logisch.
Toen kwam ANSI
Toen kwam ANSI langs en had andere ideeën:
- als je een funky naam hebt, plaats deze dan tussen aanhalingstekens (
"..."
) - gebruik apostrof (
'...'
) voor tekenreeksen - en we geven niet eens om je vierkante haken
Wat betekent dat als je wilt "citeren" een funky kolom- of tabelnaam moet u aanhalingstekens gebruiken:
SELECT "Hello, world!" FROM "The world's most awful table name"
Als u SQL Server kende, wist u dat aanhalingstekens werden al gebruikt om strings weer te geven. Als u blindelings probeerde die ANSI-SQL . uit te voeren alsof het T-SQL . is :het is onzin, en SQL Server heeft je dat verteld:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.
Het is het morele equivalent van proberen uit te voeren:
SELECT 'Hello, world!' FROM 'The world''s most awful table name'
Dat is hetzelfde als uitvoeren:
SELECT 'string' FROM 'string'
U moet zich aanmelden voor het nieuwe ANSI-gedrag
Daarom heeft Microsoft een functie toegevoegd waarmee u zich kunt aanmelden voor de ANSI-smaak van SQL.
Origineel (of QUOTED_IDENTIFIER
uit) :
SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid
STEL QUOTED_IDENTIFIER IN :
SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid
Met SQL Server kunt u nog steeds [square brackets]
. gebruiken , in plaats van u te dwingen "quotation marks"
te gebruiken . Maar met QUOTED_IDENTIFIER AAN, kunt u niet gebruik "double quote quotation mark around strings"
, je mag alleen 'the single quote apostrophe'
. gebruiken .