我们遇到了一个问题,我们的一个存储过程抛出错误;
SELECT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'
Run Code Online (Sandbox Code Playgroud)
我通过修改存储的proc并将引用的标识符设置为ON来修复它.问题是,我在CREATE PROCEDURE调用之前做了这个.例如;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[InsertStuff]
Run Code Online (Sandbox Code Playgroud)
我原以为这会影响CREATE PROCEDURE语句,但不会影响该程序的执行.
我们的脚本都被部署为drop并创建脚本并通过sqlcmd运行.我刚刚在这里阅读(搜索示例:执行SQLCMD),这里 sqlcmd执行时带引号标识符off.我已经更改了我们的脚本以包含-I开关,以查看是否可以解决我们的问题.
那时我的问题是;
1)SET QUOTED_IDENTIFIER ON语句是否仅影响DDL CREATE PROCEDURE语句,还是它也影响存储过程的执行?我的快速测试表明后者.
2)由于此开关的默认设置为ON,我假设通过设置-I我的sqlcmd查询的开关将没有不利影响.对于所有意图和目的,我将假设它与复制脚本的内容然后将它们粘贴到查询管理器并执行命令相同.如果我错了,请纠正我.我们的简单部署脚本如下;
@echo off
SET dbodir=../Schema Objects/Schemas/dbo/Programmability/Stored Procedures/
SET tpmdir=../Schema Objects/Schemas/TPM/Programmability/Stored Procedures/
echo --- Starting dbo schema
for %%f in ("%dbodir%*.sql") do (echo Running %%f.... && @sqlcmd -I -U %1 -P %2 -S %3 -d %4 -i …Run Code Online (Sandbox Code Playgroud)