0

一時テーブル (##TMP) を参照として使用して Production テーブル (EMPTAB) からデータを削除することにより、データをテーブル (EMPTAB_Archive) にアーカイブしようとしています。

一時テーブルには empcode と empname の 2 つのフィールドが含まれていることに注意してください。これは、動作していないストアド プロシージャのコードの一部です。

SELECT @SQL =          'DELETE ET1
                        FROM EMPDB..EMPTAB ET1 DELETED.*
                        INTO [EMPDB_ARCHIVE]..EMPTAB_Archive
                        INNER JOIN ##TMP TMP1
                        WHERE EMPID IN ##TMP
                        AND TMP1.DOCUMENTID = ET1 .EMPID'
         EXEC(@SQL)

しかし、私はエラーメッセージの下になっています

メッセージ 102、レベル 15、状態 1、行 2 'DELETED' 付近の構文が正しくありません。メッセージ 102、レベル 15、状態 1、行 1 '##TMP' 付近の構文が正しくありません。

4

2 に答える 2

1

問題は にありWHERE EMPID IN ##TMPます。結合を使用する必要があります。また、に削除することも正しくありません。

WHERE EMPID IN ##TMPjoin によって実行する必要があります。

正しい SQL は次のようになるはずです。

SELECT @SQL = 'DELETE ET1 OUTPUT DELETED.* 
INTO [EMPDB_ARCHIVE]..EMPTAB_Archive
FROM EMPDB..EMPTAB ET1 
INNER JOIN ##TMP TMP1 ON 
TMP1.DOCUMENTID = ET1 .EMPID'
EXEC(@SQL)
于 2013-11-06T12:35:55.360 に答える