2012-03-22 58 views
0

我有一個包含大約20個表的數據庫「Student」。 其中一個表格是「Columns」,它存儲「Student」數據庫中存在的所有表格的「Column_Names」列中的所有列名稱。此表格還在「Table_Names」列中存儲表名稱查詢從表中列出的表名中刪除數據

現在,我想編寫一個查詢「Columns」表並查找「Column_Name」,最後四個字符爲「test」。這裏是我的那個查詢:

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

現在我想寫一個刪除查詢這將在上面查詢輸出,其中,與去年四個字符列「試驗「Table_Names」列中列出的所有表刪除數據「有」德爾「作爲數據。

我該怎麼做?

回答

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 2012-03-22 21:44:52

+0

我讀錯了,我的錯誤。但是,數據未被刪除。我打開了包含'del'作爲該列中數據的最後四個字符的列名='text'的表,它仍然存在。這只是在#Temp表格中刪除而不是原件? – user793468 2012-03-22 21:58:49

+0

你最近的評論中是「文字」還是「測試」?您可能想要執行一些調試輸出以查看最初的'#Temp'表包含的內容,以及EXECUTE sp_executesql'之前查看用於@Column_Name和@Table_Name變量的值 – PinnyM 2012-03-23 02:27:36