我的工作最近将我们的SQL Server版本从2005年升级到2012年。
这导致我们的一些存储过程停止工作,它们引用了使用SET QUOTED_IDENTIFIER ON创建的视图。
这是因为这些存储过程本身是使用SET QUOTED_IDENTIFIER OFF创建的(见下文)。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[vw_User]
AS
SELECT UserId, LoginId, FirstName, LastName FROM "User" -- no real-world need for quoted identifiers here, just for the sake of this example
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROC [dbo].[getUserById]
@userId int
AS
SELECT LoginId, FirstName, LastName FROM [vw_User] WHERE UserId = @userId
GO
使用SQL Server 2005这不是问题,但在运行任何这些过程的SQL Server 2012中都会生成错误:
SELECT失败,因为以下SET选项不正确 设置:' QUOTED_IDENTIFIER'。验证SET选项是否正确 与计算列和/或的索引视图和/或索引一起使用 过滤的索引和/或查询通知和/或XML数据类型 方法和/或空间索引操作。
是否存在某些可能因此类升级而更改的相关设置,或者SQL Server 2012处理QUOTED_IDENTIFIER设置范围的方式有哪些根本区别?