Bash FreeTDS/unixODBC更新失败,因为以下设置选项的设置不正确:';CONCAT_NULL_产生_NULL、ANSI_警告、ANSI_填充和x27;

Bash FreeTDS/unixODBC更新失败,因为以下设置选项的设置不正确:';CONCAT_NULL_产生_NULL、ANSI_警告、ANSI_填充和x27;,bash,sql-server-2005,freetds,unixodbc,Bash,Sql Server 2005,Freetds,Unixodbc,我有一个存储过程,它对具有计算的持久列的表进行更新。 从ManagementStudio运行存储过程时,它工作正常。但是当我用unixodbcisql运行它时,我得到了这个错误 [37000][unixODBC][FreeTDS][SQL Server]UPDATE failed because the following SET options have incorrect settings: 'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADD

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

[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
我尝试在存储过程中将这些设置为“开”,但没有成功

我还尝试添加

AnsiNPW = 1
在我的unixODBC数据源模板中

我甚至尝试在CREATEPROCEDURE子句之前,将这些ANSI_填充和ANSI_警告设置为ON来重新创建存储过程

但似乎没有什么不同


关于存储过程中的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 ...