UPDATE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'

Solution 1:

To avoid that error, I needed to add

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;

for all my stored procs editing a table with a computed column.

You don't need to add the SET inside the proc, just use it during creation, like this:

SET ANSI_NULLS, QUOTED_IDENTIFIER ON;
GO

CREATE PROCEDURE dbo.proc_myproc
...

Solution 2:

We cannot create a indexed view by setting the quoted identifier off. I just tried it and SQL 2005 throws an error straight away if it is turned off:

Cannot create index. Object 'SmartListVW' was created with the following SET options off: 'QUOTED_IDENTIFIER'.

As gbn said, rebuilding the indexes must be the only other way it got turned off.

I have seen lots of articles saying it must be on before creating index on views. Otherwise you would get an error while inserting, updating the table, but here I can get the error straight away, so sql engine won't allow to create index on views by setting it to off, per this msdn link.

I have asked a similar question here in stack sometime ago...

EDIT

I turned off the global queryexecution (in editor) ANSI settings and ran the index script in new editor, this time also it throws the same error. So it's clear we can't create indexes on views by turning off quoted_identifier.

Solution 3:

I got this error when I tried to run an sql file via the command line with sqlcmd:

sqlcmd -i myfile.sql

By default QUOTED_IDENTIFIER is set to OFF when using this command line tool and you will get the same error (no matter that in the SSMS it may be set to ON and the same script will pass).

So indeed the solution is to add this QUOTED_IDENTIFIER ON to your sql file like Jim suggested, or explicitly specify the flag -I:

sqlcmd -i myfile.sql -I

Solution 4:

I'm late to this party but had this error and wanted to share it.

Our problem was recurrent but random so we knew it wasn't an object that had been created incorrectly.

We finally tracked it down to an ODBC connection on one of the servers in our Citrix farm. On that server, the ODBC in question had had its QUOTED_IDENTIFIERS turned off (unchecked). On all the other servers, it was checked as expected. We turned the option on and the problem was instantly solved.

Solution 5:

Some thoughts:

Did indexes get rebuilt? If you do index maintenance using DMO, then quoted_identifier will not always be preserved. It can be a pain to track down and was a particular problem is SQL Server 2000 until SP4 or so.

However, I've seen on SQL Server 2005 some time ago too.