2012-03-22 64 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