What are the SET options?
SQL Server backward compatibility SET options allow legacy T-SQL code to run on newer SQL Server versions without changes while supporting ISO SQL standards for new development.
Briefly, they prevent applications that expect non-ISO behavior from breaking.
Why should you care about it?
Creating objects with these settings set to OFF is not advised. Should you later wish to add filtered indexes, indexed views, or other advanced features to tables used within these objects, they cause issues (break).
How to find SQL Server objects with set options?
You can find objects with QUOTED_IDENTIFIER or ANSI_NULLS OFF using the query below.
SELECT OBJECT_SCHEMA_NAME(o.object_id) AS SchemaName
,OBJECT_NAME(o.object_id) AS ObjectName
,o.type_desc AS ObjectType
FROM sys.objects AS o
WHERE 0 IN (
OBJECTPROPERTY(o.object_id, 'ExecIsQuotedIdentOn')
,OBJECTPROPERTY(o.object_id, 'ExecIsAnsiNullsOn')
)You can find varchar(n)/varbinary(n) columns with ANSI_PADDING OFF using the query below.
SELECT OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName
,OBJECT_NAME(t.object_id) AS ObjectName
,c.name AS ColumnName
FROM sys.tables AS t
JOIN sys.columns AS c ON c.object_id = t.object_id
JOIN sys.types AS ty ON ty.system_type_id = c.system_type_id
AND ty.user_type_id = c.user_type_id
WHERE c.is_ansi_padded = 0
AND (
(
ty.name IN (
'varbinary'
,'varchar'
)
AND c.max_length <> - 1
)
OR (
ty.name IN (
'binary'
,'char'
)
AND c.is_nullable = 1
)
)How to fix them?
- Recreate the object from a session with
QUOTED_IDENTIFERandANSI_NULLSONto change the persistedOFFsetting toON. Make sure the session setting isONwhen executing DDL scripts. - To change a persistent column
ANSI_PADDINGsetting fromOFFtoON, executeALTER TABLE…ALTER COLUMNfrom anANSI_PADDINGONsession (specify the same definition as the existing column).
More information
Speak with a SQL Expert
In just 30 minutes, we will show you how we can eliminate your SQL Server headaches and provide operational peace of mind