2011-12-05 24 views
11

実行時に名前だけがわかるテーブルの削除を呼び出す必要があります。EXEC()を呼び出すとエラーが発生します:ストアドプロシージャが見つかりませんでした

私は、tablenameと条件で動的にdelete文を作成し、その文字列をEXEC()関数の引数として渡すストアドプロシージャを持っています(これはトランザクション内にあります。

ストアドプロシージャを実行すると、私はエラーが発生します。ストアドプロシージャを見つけることができませんでした。私は動的に作成され、EXEC()に送信されたステートメントを参照しています。

は、ここに私のコードです:

DECLARE @dynTab AS varchar(50), @dynDelete AS varchar(255) 
    DECLARE @crsr CURSOR 
    SET @crsr = CURSOR FAST_FORWARD 
    FOR 
    SELECT dyn_tablename FROM dyn_tab WHERE dyn_doc_type_id IN (SELECT doc_id FROM tree_tab WHERE id = @id) AND dyn_tablecreated = 1 

OPEN @crsr 
FETCH NEXT FROM @crsr 
INTO @dynTab 

WHILE @@FETCH_STATUS = 0 AND @@ERROR = 0 
    BEGIN 
     SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
     EXEC @dynDelete 

     FETCH NEXT FROM @crsr 
     INTO @dynTab 
    END 

      CLOSE @crsr 
     DEALLOCATE @crsr 
     IF @@ERROR <> 0 
     BEGIN 
      ROLLBACK TRAN 
      return 0 
     END 

...

ここでエラーです:

Could not find stored procedure 'DELETE FROM myTable WHERE id = 1111'

答えて

18

EXECは括弧なしでプロシージャを呼び出すしようとします。

あなたは以下のようにあなたのSQLクエリを実行するために
EXEC(@dynDelete)

3

をお試しください:

SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXEC(@dynDelete) 

OR

SET @dynDelete = 'DELETE FROM ' + @dynTab + ' WHERE id = ' + @id 
EXECUTE(@dynDelete) 
1

使用EXEC()またはEXECUTE()を記述する必要がEXEC(@dynDelete)

1

DeleteCommandTypeを使用する場合は、SqlDataSourceから削除するEXEC

関連する問題