テーブルを削除するための単純なストアドプロシージャの後です。ここに私の最初の試みです:テーブルを削除するT-SQLストアドプロシージャをどのようにparamateriseしますか?
CREATE PROC bsp_susf_DeleteTable (@TableName char)
AS
IF EXISTS (SELECT name FROM sysobjects WHERE name = @TableName)
BEGIN
DROP TABLE @TableName
END
私はMSクエリアナライザでこれを解析するとき、私は次のエラーを取得する:
単一のテーブルの通常のSQLは次のようになりますので、一種の理にかなってServer: Msg 170, Level 15, State 1, Procedure bsp_susf_DeleteTable, Line 6
Line 6: Incorrect syntax near '@TableName'.
:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'tbl_XYZ')
BEGIN
DROP TABLE tbl_XYZ
END
(WHERE句内の)tbl_XYZの最初のインスタンスは、その周りに一重引用符があることに注意してください.DROP文の2番目のインスタンスは、そうではありません。変数(@TableName)を使用すると、この区別はできません。
これを行うためにストアドプロシージャを作成できますか?またはIF EXISTSをどこにでもコピーする必要がありますか?
ありがとうウェイン - 正常に働いた。 – dave
テーブル名はnvarcharなので@SQL nvarchar(max)を作成します。 (実際にはsysnameですが、nvarcharに相当します(数字は128かもしれません) –
大括弧のために@TableNameをエスケープする必要がありますSQL Serverにはこれを行うコマンドがあります@sql = 'drop table' + QuoteName TableName); –