为了优化特定的查询集,我创建了一个过滤的非聚集索引,但是我开始从各种来源得到以下错误:
更新失败,因为以下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 + '%' ;
答案 0 :(得分:2)
您可以只安装Redgate的SQL Search或其他供应商的类似产品。然后,很容易搜索这样的东西。
一次性使用
trash-cli
应该这样做。或
SELECT * FROM sys.sql_modules WHERE definition LIKE '% ansi %'
答案 1 :(得分:0)
一个简单的搜索就可以做到这一点,例如这样
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc,
m.*
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id = o.object_id
WHERE m.uses_ansi_nulls = 0