47

Insert/Update/Deleteでステートメントを実行できますかSQL Server Functions。で試してみましたが、SQL Server エラーが発生しました。

エラー:

Invalid use of side-effecting or time-dependent operator in 'DELETE' within a function.

AnyBody には、Insert/Update/Deleteステートメントを使用できない理由が考えられますSQL Server functions.

いいアイデアお待ちしております

4

13 に答える 13

81

いいえ、できません。

SQL Server Books Online から:

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

参照

于 2011-05-27T10:23:20.743 に答える
21

数学と同様に、SQL Server の関数を使用してデータベースを変更することはできません。これらは読み取り専用であり、開発者がコマンドとクエリの分離を実装するのに役立ちます。言い換えれば、質問をしても答えが変わるべきではありません。プログラムでデータベースを変更する必要がある場合は、代わりにストアド プロシージャを使用します。

于 2011-05-27T10:33:20.073 に答える
6

ストアドプロシージャのように関数からテーブルを更新することはできませんが、テーブル変数を更新することはできます。

したがって、たとえば、関数でこれを行うことはできません。

create table MyTable
(
    ID int,
    column1 varchar(100)
)
update [MyTable]
set column1='My value'

しかし、あなたはできる:

declare @myTable table
(
    ID int,
    column1 varchar(100)
)

Update @myTable
set column1='My value'
于 2012-08-15T18:40:15.610 に答える
0

関数はそのように使用することを意図していません。データ変更を実行したい場合は、そのための Stored Proc を作成できます。

于 2021-02-09T11:05:20.207 に答える
-1

削除/挿入/更新を実行する必要がある場合は、動的ステートメントを実行することもできます。すなわち:

declare 
    @v_dynDelete                 NVARCHAR(500);

 SET @v_dynDelete = 'DELETE some_table;'; 
 EXEC @v_dynDelete
于 2016-02-18T00:46:31.297 に答える