質問: object_id(n' + @tablename + ') ' + 'drop table ' + @tablename exec(@sql) go --テーブル生成 create table slip_itemxx( [slip_no] [int] not null ) go --ストアド削除 drop procedure sp_slip_itemxx go
回答: 1) ストアドプロシージャを「作る」ことと「実行する」ことは違います。 今の状態では「create procedure ~ go」でストアドは作成されますが、せっかく作成しても実行されません。 テーブルを作成する前に実行しなくてはなりません。 exec sp_slip_itemxx go が必要です、 2) 変数の定義がvarcharだけで長さの指定がありません。 長さを指定しないと1バイトしかとられませんので、@tablenameは「s」、@sqlは「i」だけがセットされて当然ながら正しく機能しません。 3) そもそも動的クエリはストアド内でしか実行できないと思っていませんか? 以下だけで十分かと思います。 declare @tablename sysname set @tablename = 'slip_itemxx' if object_id(@tablename) is not null exec('drop table '+@tablename) go