In this article we will discuss on the difference between SET QUOTED_IDENTIFIER ON and SET QUOTED_IDENTIFIER OFF. Please go through the article SET QUOTED_IDENTIFIER ON/OFF Setting in Sql Server to have detailed information on this setting. As a better practice we should always use SET QUOTED_IDENTIFIERS ON setting.
SET QUOTED_IDENTIFIER ON | SET QUOTED_IDENTIFIER OFF | |
Characters Enclosed within double quotes | is treated as Identifier | is treated as Literal |
Try using Characters Enclosed within double quotes as identifier | Works Example: Below statement to create a table with table name “Table” succeeds. SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.”Table” (id int,”Function” VARCHAR(20)) GO |
Fails Example: Below statement to create a table with table name “Table” Fails. SET QUOTED_IDENTIFIER OFF GO CREATE TABLE dbo.”Table” (id int,”Function” VARCHAR(20)) GO Error Message: Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ‘Table’. |
Try using Characters Enclosed within double quotes as Literal. | Fails Example: Below statement fails. SET QUOTED_IDENTIFIER ON GO SELECT “BIRADAR” Error Message: Msg 207, Level 16, State 1, Line 1 Invalid column name ‘BIRADAR’. |
Works Example: Below Statement Works. SET QUOTED_IDENTIFIER OFF GO SELECT “BIRADAR” |
Characters Enclosed within single quotes | is treated as Literal Example: SET QUOTED_IDENTIFIER ON GO SELECT ‘BIRADAR’ |
is treated as Literal Example: SET QUOTED_IDENTIFIER ON GO SELECT ‘BIRADAR’ |
How to find all the objects which are created with SET QUTOED_IDENTIFIER ON/OFF | Below Statement can be used to find all the objects created with SET QUTOED_IDENTIFIER setting as ON: SELECT OBJECT_NAME (object_id) FROM sys.sql_modules WHERE uses_quoted_identifier = 1 |
Below Statement can be used to find all the objects created with SET QUTOED_IDENTIFIER setting as OFF: SELECT OBJECT_NAME (object_id) FROM sys.sql_modules WHERE uses_quoted_identifier = 0 |
Please correct me, if my understanding is wrong. Comments are always welcome.