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 に答える