在SQL Server 2008上使用Filtered Index删除/插入失败?

Ken*_*hou 5 sql-server-2008 filtered-index

我使用默认设置创建存储过程,如:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

Create  PROCEDURE [dbo].[TestSP] 
AS
BEGIN
   set arithabort off
   set arithignore on
   --.....
END
Run Code Online (Sandbox Code Playgroud)

没事.然后我在表上创建了一个过滤的唯一索引,用于DB中的非空值,然后我无法在SQL Server Management Studio中运行任何存储过程.我得到的错误是这样的:

DELETE(或INSERT)失败,因为以下SET选项具有不正确的设置:'ANSI_NULLS,QUOTED_IDENTIFIER'.验证SET选项是否正确,以便与计算列和/或筛选索引和/或查询通知和/或XML数据类型方法和/或空间索引操作的索引视图和/或索引一起使用.

我尝试运行存储过程,如:

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
EXEC TestSP
Run Code Online (Sandbox Code Playgroud)

要么

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
EXEC TestSP
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上述错误.我很困惑.如何解决这个问题?

Jas*_*ish 2

ANSI_NULLS 和 QUOTED_IDENTIFIER 的设置基于您创建/更改过程时的这些设置,而不是基于运行该过程的实例中的设置。

您希望为 TestSP 运行 ALTER PROC,在运行时至少将 QUOTED_IDENTIFIER 设置为 ON。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[TestSP] 

AS
BEGIN
   set arithabort off
   set arithignore on
   --.....
END
Run Code Online (Sandbox Code Playgroud)