Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разбиране на QUOTED_IDENTIFIER

Търся разбиране за 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' .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията CHARINDEX() в SQL Server (T-SQL)

  2. Типове курсори на SQL Server - Статичен курсор само за препращане | Урок за SQL Server / Урок за TSQL

  3. Какво е SQL Server? (Определение, версии, издания)

  4. Проверете типа на параметъра на функцията на дял в SQL Server (T-SQL)

  5. Възможно ли е да се посочи условие в Count()?