5

次のようなデフォルト設定でストアドプロシージャを作成します。

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

Create  PROCEDURE [dbo].[TestSP] 
AS
BEGIN
   set arithabort off
   set arithignore on
   --.....
END

それは結構です。次に、DB の非 null 値のテーブルにフィルター処理された一意のインデックスを作成すると、SQL Server Management Studio でストアド プロシージャを実行できなくなりました。私が得るエラーは次のようなものです:

次の SET オプションの設定が正しくないため、DELETE (または INSERT) が失敗しました: 'ANSI_NULLS, QUOTED_IDENTIFIER'。計算列のインデックス付きビューやインデックス、フィルター選択されたインデックス、クエリ通知、XML データ型メソッド、空間インデックス操作で使用する SET オプションが正しいことを確認します。

次のようなストアド プロシージャを実行しようとしました。

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
EXEC TestSP

または

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
EXEC TestSP

それでも上記のエラーが発生します。私はとても混乱しています。この問題を解決するにはどうすればよいですか?

4

4 に答える 4

2

ANSI_NULLS と QUOTED_IDENTIFIER の両方の設定は、プロシージャを実行するインスタンスの設定ではなく、プロシージャを作成/変更するときの設定に基づいています。

TestSP に対して、実行時に少なくとも QUOTED_IDENTIFIER を ON に設定する ALTER PROC を実行したいと考えています。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[TestSP] 

AS
BEGIN
   set arithabort off
   set arithignore on
   --.....
END
于 2013-04-23T19:46:49.860 に答える
0

これは SQL Server の問題のようです (不整合?)。エラー「次の SET オプションの設定が正しくないため、INSERT に失敗しました: "QUOTED_IDENTIFIER" は、次の条件が満たされている場合に生成されます。

  • テーブルには NULL を許可する列がありますが、デフォルト値が定義されていません。例:

[LookupID] [int] NULL

  • この列に定義された一意のフィルター処理されたインデックスがあります

    Create Unique nonclustered index [UniqueExceptNulls] on [tablename]
      ( [lookupID] asc)  where ([LookupID] is not NULL)
    

解決策: 列 [LookupID] にデフォルトの制約を追加します。

ALTER TABLE [tablename] add CONSTRAINT [DF_TableName_lookupID] DEFAULT (NULL) FOR [lookupID]
于 2013-05-23T20:53:04.560 に答える
0

この状況に遭遇したばかりで、原因はファイル プロパティとVisual Studio でのデータベース プロジェクトのデプロイプロセス (つまりmyDatabase.dbproj ) に関連していました。

エラーの根本原因は、ストアド プロシージャを作成する必要があるコンテキストです。データベース オプションANSI_NULLSとは、ストアド プロシージャを作成する前QUOTED_IDENTIFIERに設定する必要があります (これらのオプションを sp コードに設定してもエラーにはなりませんが、役に立ちません)。

SETソースを SQL Server Management Studio にコピー アンド ペーストすると、ストアド プロシージャが実行されるため、デプロイ コンテキストのオプションの違いが問題の原因であると確信しました。次に、これらの設定 ( Database.sqlsettings) を確認したところ、すべて問題ANSI_NULLSありQUOTED_IDENTIFIERませんでした。適切に設定されていましたが、問題はまだ残っていました...

各オブジェクト ファイルに、データベース プロジェクトの [プロパティ] エントリがあることがわかるまで(ファイル名を右クリックして、ダイアログを表示します)。これらのプロパティは実際にはデータベース設定を上書きしていたので、変更して問題を解決しました。Project Default

sql-file-properies-dialog

PS: Visual Studio から新しいストアド プロシージャを作成し、スキーマ比較を使用して手動で作成したものをインポートするテストをさらに行ったところ、ファイルは で作成されたProject Defaultので、この設定が手動で変更されたか、以前のバージョンの Visual Studio から誤ってインポートされたと思います。

于 2013-07-11T11:27:02.357 に答える