我创建了一个过滤的非聚集索引以优化特定的查询集,但我开始从各种来源得到以下错误:
UPDATE 失败,因为以下 SET 选项的设置不正确:“ANSI_NULLS”。验证 SET 选项对于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作是否正确。
似乎某些遗留例程是使用该SET ANSI_NULLS OFF
选项创建的,并且当引擎尝试从给定上下文更新目标表时,会引发错误。
我想知道有没有办法查看使用此选项创建的例程。例如,如果您编写这样的例程脚本,您会得到如下内容:
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE ....
我通常使用如下脚本在对象定义中查找内容,但此设置不是其中的一部分:
DECLARE @SearchWord NVARCHAR(128) = 'SET ANSI_NULLS OFF'
SELECT [ROUTINE_NAME]
FROM [INFORMATION_SCHEMA].[ROUTINES]
WHERE [ROUTINE_DEFINITION] LIKE '%' + @SearchWord+'%'
UNION
SELECT OBJECT_NAME([id])
FROM [SYSCOMMENTS]
WHERE [text] LIKE '%' + @SearchWord + '%'
GROUP BY OBJECT_NAME([id])
UNION
SELECT OBJECT_NAME(object_id)
FROM [sys].[sql_modules]
WHERE [definition] LIKE '%' + @SearchWord + '%' ;