6

update現在、 SQL Serverでを実行しようとしています(ただし、をサポートする任意のDMLステートメントである可能性があります)。次のように、出力をローカル一時テーブルに配置したいと思います。output

update
    dbo.MyTable
set
    MyField = 30
output
    inserted.MyKeyField
into
    #myTempTable
from
    dbo.MyTable as t
where
    f.MyFilteredField = 8 

句のドキュメントに従って、構文が正しいことを知っていますoutput(私の強調):

output_table

呼び出された行が呼び出し元に返されるのではなく、返される行が挿入されるテーブルを指定します。output_tableは一時テーブルの場合があります

そうは言っても、テーブルを作成するだけであるという点で、ステートメントのinto句の場合と同じように機能することを期待しています。select

ただし、次のエラーが発生します。

オブジェクト名'#myTempTable'が無効です。

output句(insertedまたはdeleted)の結果を一時テーブルに入れるにはどうすればよいですか?

4

1 に答える 1

12

output句は新しいテーブルを生成しないため、句で指定されているものの構造に一致するテーブルを事前に生成する必要があります次にoutput例を示します。

select t.MyKeyField into #myTempTable from dbo.MyTable as t where 1 = 0

select into上記の構文を使用する必要はなく、create table同様に機能することに注意してください。結局、output句のフィールドに一致する空の一時テーブルを作成するのが最も簡単なものは何でも。

テーブルが作成されると、「無効なオブジェクト名」エラーはなくなり、DMLステートメントはエラーなしで実行されます(他にエラーがないと仮定した場合)。

于 2012-05-31T18:18:04.007 に答える