我陷入了SQL Server 2005的一个相当奇怪的问题,它抛出了
"插入记录时应设置SET QUOTED IDENTIFIER"
(用作SP)到特定表.这工作得很好,但随机抛出这个错误.
我已经验证了SP.我们没有在里面手动指定SET QUOTED IDENTIFIER设置,因此默认情况下它必须为ON.
有人可以澄清可能是什么问题吗?
必须使用SET QUOTED IDENTIFIER ON创建表格吗?我还没检查表脚本.
我观察到这个问题只发生在SP在日期列上执行插入或更新(modifiedAt)...示例值为'2009-08-10 06:43:59:447'..
传递的值是否有问题?
Ram*_*Vel 24
经过长期的斗争,我们能够解决这个问题.我只是想分享原因.
我们的构建团队维护一个单独的内部工具来部署脚本,这些脚本在内部触发SQLCMD(shell)实用程序以在db中执行T-SQL脚本.
这是罪魁祸首:默认情况下,QUOTED_IDENTIFIER是OFF在SQLCMD模式下运行!
通过此工具运行的每个脚本都是使用QUOTED IDENTIFIER OFF.我们是唯一使用索引视图的模块.你在之前的帖子中熟悉的所有剩余故事:(
注意:我将投票给每个人的帖子都很有用.
编写存储过程脚本,确保/更改SET选项,运行ALTER PROC以确保设置了SET QUOTED IDENTIFIER ON.
为什么?
"SET QUOTED IDENTIFIER"的设置在创建时针对存储过程定义,并且对于表始终为"ON".来源,BOL.
创建表时,即使在创建表时将该选项设置为OFF,QUOTED IDENTIFIER选项也始终在表的元数据中存储为ON.
创建存储过程时,将捕获SET QUOTED_IDENTIFIER和SET ANSI_NULLS设置,并将其用于该存储过程的后续调用.
用于连接的默认可以在服务器级别(sp_configure的"用户选项")或数据库级别(ALTER DATABASE)来定义.对于SSMS,它位于"Tools..Options .. Query Execution..SQL Server..ANSI"下.它也是客户端库的默认设置(DB-LIb除外).
现在,您打开SSMS查询窗口并开始键入"CREATE PROC ..",然后在运行代码时使用SSMS设置.
并且SET QUOTED IDENTIFIER 无法在存储过程中的运行时设置.在你不同意之前告诉我一个参考...从上面的MS BOL链接:
在存储过程中执行时,SET QUOTED_IDENTIFIER的设置不会更改.
您必须努力运行任何带有此OFF的代码...所以最可能的解决方法是更改或重新创建存储过程.
| 归档时间: |
|
| 查看次数: |
10918 次 |
| 最近记录: |