1

我有一个存储过程,它对具有计算的持久列的表进行了更新。从 Management Studio 运行存储过程时,它工作正常。但是当我用 unixODBC isql 运行它时,我得到了这个错误

[37000][unixODBC][FreeTDS][SQL Server]UPDATE failed because the following
SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS,
ANSI_PADDING'. 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.

如果我将以下内容放入存储过程中,我也会从 Management Studio 中收到此错误消息:

SET ANSI_PADDING OFF
SET ANSI_WARNINGS OFF

我尝试在存储过程中将这些设置为“ON”,但这不起作用。

我也尝试添加

AnsiNPW = 1

在我的 unixODBC 数据源模板中。

我什至尝试在 CREATE PROCEDURE 子句之前将那些 ANSI_PADDING 和 ANSI_WARNINGS 设置为 ON 来重新创建存储过程。

不过似乎没什么区别。

任何建议表示赞赏

4

1 回答 1

2

进一步研究这一点,MSDN谈到了存储过程中的 SET 语句

Stored procedures execute with the SET settings specified at execute time except
for SET ANSI_NULLS and SET QUOTED_IDENTIFIER. Stored procedures specifying SET
ANSI_NULLS or SET QUOTED_IDENTIFIER use the setting specified at stored procedure
creation time. If used inside a stored procedure, any SET setting is ignored.

所以这就解释了为什么在存储过程中设置它们什么也没做。

为了解决这个问题,我在调用我的存储过程之前设置了它们,如下所示:

SET CONCAT_NULL_YIELDS_NULL, ANSI_PADDING, ANSI_WARNINGS ON; EXEC myProc ...
于 2013-08-16T16:44:05.447 回答