52

SQL関数に次のコードがあります:

if @max_chi > -999
begin
    INSERT INTO CH_TABLE(X1, X2, VALUE)
    VALUES(cur_out.sessionnumber, maxpos, max_chi)

    commit
end

以下は SQL Server 2008 クエリで、エラーが発生します。

関数内での副作用演算子 'INSERT' の使用は無効です。

なぜ私はこれを行うことが許可されていないのですか? これを修正するにはどうすればよいですか?

4

4 に答える 4

78

関数を使用してベース テーブルにデータを挿入することはできません。関数はデータを返します。これは、ドキュメントの最初の制限としてリストされています。

ユーザー定義関数を使用して、データベースの状態を変更するアクションを実行することはできません。

「データベースの状態を変更する」には、データベース内のデータを変更することが含まれます (テーブル変数は明らかな例外ですが、OP は約 3 年前には気にしませんでした。このテーブル変数は、関数呼び出しの間だけ存続し、影響しません。基礎となるテーブルを何らかの方法で)。

関数ではなく、ストアド プロシージャを使用する必要があります。

于 2013-08-22T19:44:11.023 に答える
8

関数を使用してベース テーブル情報を変更することはできません。ストアド プロシージャを使用してください。

于 2013-08-22T19:45:50.760 に答える