2009-07-24 6 views
0

申し訳ありませんが、私は基本的なことを知らないので、TSQLを初めて使っています。私はこの機能に取り組んできましたが、私は多くの構文上の問題に取り組んできました。誰かがこの機能を書いて私を助けることができるなら、私はそれを感謝します。テーブル名を削除してテーブルを削除するTSQL関数を書くにはどうすればいいですか


1.私は私がそれをしたいと思いドロップアクション
3.を実行した後に、それはエラーをチェックしたいテーブル
2をドロップしようとする前に、それはテーブルの存在を確認したいと思います
4.「No Action Needed」を印刷する必要はありませんが、タスクを少し難しくするためにはそれを含めています。できるだけ速く、TSQLだけでなく、可能性を学ぶために:
5.私は

CREATE FUNCTION SAFE_DROP_TABLE(@TableName NVARCHAR(30)) 
AS 
BEGIN 
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@TableName) AND TYPE IN (N'U'))   
     DROP TABLE @TableName 
     IF @@ERROR <> 0 
     BEGIN 
      PRINT 'Failed to drop ' + @TableName + ' Error = ' + @@ERROR 
     END ELSE BEGIN 
      PRINT 'dropped' + @TableName 
     END 
    ELSE 
     PRINT 'NO ACTION NEEDED' 
    END 
END 

目標をクリーンアップする方法がわからない構文エラーの問題の多くに遭遇してきました。私はできるだけ多くのSQLを見て、書く必要があります。私は応答する時間がかかる人に感謝します。

答えて

3

関数を使用してテーブルを削除することはできません。ストアドプロシージャ内で行う必要があります。 (関数はデータベースを変更できません)。次のようなものがあります。

CREATE PROCEDURE SAFE_DROP_TABLE(@TableName nvarchar(30)) 
AS 
BEGIN 

    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@TableName) 
    AND TYPE IN (N'U'))    
     EXEC ('DROP TABLE ' + @TableName) -- note change here 
     IF @@ERROR <> 0 
     BEGIN 
      PRINT 'Failed to drop ' + @TableName + ' Error = ' + @@ERROR 
     END ELSE BEGIN 
      PRINT 'dropped' + @TableName 
     END 
    ELSE 
     PRINT 'NO ACTION NEEDED' 
    END 

END 
+0

EXEC( 'DROPのTABLE' QUOTENAME(@tablenameは)) - すべてのテーブル名をハンドル&SQLインジェクションから保護 –

2

EXECを使用する必要があります。

DROP TABLEという行で

、あなたはどうなる:

EXEC( 'DROP TABLEの' + @tablename)

しかし、私は強く、これをやっていないお勧めします。誰でもテーブル名(またはSQLインジェクションと呼ばれる@TableNameに他の有効なSQLを置くことができ、あらゆる種類の問題を引き起こす可能性があります)を学ぶことに深く関わる前に、いくつかのデータベース理論を読み上げました。 T-SQL構文

SQLインジェクション情報:
http://unixwiz.net/techtips/sql-injection.html
http://en.wikipedia.org/wiki/SQL_injection
http://msdn.microsoft.com/en-us/library/ms161953.aspx

+0

。のみ彼がユーザーの入力を使ってprocを呼び出すと、間違いなく推奨されます。 –

+0

テーブルを10個落とす必要があるとします。ドロップロジックを10回コピー&ペーストする必要がありますか?実際の状況では決して起こらないシナリオを10個のテーブルにドロップしていますか? – MedicineMan

+0

ビジネスロジックの一部としてテーブルを削除することは非常にまれです。テーブルは長時間張り付く傾向があります。 –

関連する問題