Recently came across some problems that were being caused by quoted_identifiers being turned off.
Here is what turning it on or off allows you to do:
Two simple queries that are allowed at all times:
select top 100 * from tmpTable
--following 2 queries are not affected by quoted identifiers being turned on or off
--[] and ‘’ are always valid delimiters ([] for identifiers and ‘’ for literals)
select top 100 * from [tmpTable]
select 'hello world'
set quoted_identifier off
select top 100 * from [tmpTable]
--select top 100 * from "tmpTable" –“” is not allowed as quoted identifiers is off
--as quoted identifiers is off – literals can be delimited by double or single quotes
select "hello world"
select 'hello world'
set quoted_identifier on
select top 100 * from [tmpTable]
select top 100 * from "tmpTable" –“” is allowed for identifiers as quoted identifiers is on
--select "hello world" –“” as a delimiter for literals is not allowed as quoted identifiers is on
select 'hello world'
And the problem I was facing was caused by the following requirement on Quoted Identifiers (from MSDN): SET QUOTED_IDENTIFIER must be ON when you are creating or changing indexes on computed columns or indexed views. If SET QUOTED_IDENTIFIER is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail.
And here is a query to find all stored procs with quoted identfiers turned off (via zvolkov.com).
SELECT SCHEMA_NAME(s.schema_id) + '.' + s.name AS name, s.create_date, s.modify_date, OBJECTPROPERTY(s.object_id,'ExecIsQuotedIdentOn') AS IsQuotedIdentOn FROM sys.objects s WHERE s.type IN ('P','TR','V','IF','FN','TF') AND OBJECTPROPERTY(s.object_id,'ExecIsQuotedIdentOn') = 0 ORDER BY SCHEMA_NAME(s.schema_id) + '.' + s.name
No comments:
Post a Comment