Dan*_*ell 7 xml sql t-sql sql-server stored-procedures
我有一个存储过程,它接受XML参数并将数据插入到多个表中.如果我使用SSMS查询窗口将存储过程运行到数据库中,一切正常.但是,我们有一个自定义安装程序,用于将存储过程部署到数据库,当使用它时,sp的执行失败并显示以下错误:
INSERT failed because the following SET options have incorrect settings:
'ANSI_NULLS, QUOTED_IDENTIFIER'. Verify that SET options are correct for use with
indexed views and/or indexes on computed columns and/or query notifications
and/or xml data type methods.
Run Code Online (Sandbox Code Playgroud)
在存储过程中编写脚本时,自定义安装程序不使用正确的设置.
在sp中设置这些(SET ARITHABORT ON; SET QUOTED_IDENTIFIER ON; SET ANSI_NULLS ON;)无效:
在调用代码中的sp之前,我还尝试为open连接设置这些选项.这再次没有达到预期的效果.
在sp运行到数据库时,与数据库连接的设置似乎很重要,而不是使用sp时的设置.
我已经通过在SSMS选项中使用这些设置进行了实验,这似乎就是这种情况.我希望有人确认这是绝对的情况(如果有一种方法我会喜欢听到它,但我没有希望)
不幸的是,改变安装程序目前不是我的选择,所以我期待不得不回滚几周的工作; 所以,如果我必须这样做,我想确定(并有一些证据支持我),这是唯一的选择
gbn*_*gbn 11
在CREATE或ALTER时应用的设置在运行时被忽略.
默认情况下,SSMS具有正确的设置(sqlcmd,osql等也是如此).
数据库引擎保存两者的设置
SET QUOTED_IDENTIFIER
以及SET ANSI_NULLS
创建或修改Transact-SQL存储过程的设置.执行存储过程时使用这些原始设置.因此,存储过程运行时SET QUOTED_IDENTIFIER
,SET ANSI_NULLS
将忽略任何客户端会话设置.ANSI_PADDINGS
创建或修改存储过程时,不会保存其他SET选项,例如SET ARITHABORT,SET ANSI_WARNINGS或SET .