2012-03-22 13 views
0

私は約20のテーブルを含むデータベース "Student"を持っています。 テーブルの1つは、 "Student"データベースにあるすべてのテーブルの "Column_Names"カラムのすべてのカラム名を格納する "Columns"です。この表はまた、 "Table_Names"列にテーブル名を格納しますテーブルにリストされたテーブル名からデータを削除するクエリ

"Columns"テーブルを照会し、最後の4文字を "test"として検索するクエリを作成します。

SELECT * 
    FROM Students.Columns 
    WHERE Column_Name Like '%test' 

は今、私は上記のクエリ出力、最後の4つの文字を持つ列「テスト中「Table_Names」欄に記載されているすべてのテーブルからデータを削除でしょう削除クエリを書きたい:ここではそのための私のクエリがあります"はデータとして" del "を持っています。

どうすればいいですか?

答えて

1

各エントリをループし、動的クエリを作成し、sp_executesqlを使用して実行する必要があります。これはうまくいくはずです:

SELECT * 
Into #Temp 
    FROM Students.Columns 
    WHERE Column_Name Like '%test' 

Declare @Column_Name nvarchar(max) 
Declare @Table_Name nvarchar(max) 
Declare @Sql nvarchar(max) 
While (Select Count(*) From #Temp) > 0 
Begin 
    Select Top 1 @Column_Name = Column_Name, @Table_Name = Table_Name From #Temp 
    Set @Sql = N'DELETE FROM ' + @Table_Name + N' WHERE ' + @Column_Name + N' = @delete_key' 
    EXECUTE sp_executesql @Sql, N'@delete_key nvarchar(max)', @delete_key = N'del' 

    Delete #Temp Where Column_Name = @Column_Name AND Table_Name = @TableName 
End 
+0

'del'は列名ではありません 'del'は列のデータです。データとして 'del'を含む列は削除する必要があります – user793468

+0

私はそれを間違って読んでいます、私の間違いです。ただし、データは削除されていません。私は、列名= 'text'の最後の4文字を持つテーブルのうち、その列のデータとして「del」を持っていて、まだ存在していました。これは#Tempテーブルでのみ削除され、オリジナルでは削除されませんか? – user793468

+0

最後のコメントに「テキスト」または「テスト」がありましたか?いくつかのデバッグ出力を実行して最初の '#Temp'テーブルに含まれているものと、' EXECUTE sp_executesql'の直前で@Column_Nameと@Table_Name変数にどの値が使用されているのかを確認することができます。 – PinnyM

関連する問題