查询从表中列出的表名中删除数据

时间:2012-03-22 20:41:58

标签: sql sql-server-2008

我有一个数据库“Student”,其中包含大约20个表。 其中一个表是“Columns”,它存储“Student”数据库中存在的所有表的“Column_Names”列中的所有列名。该表还将表名存储在“Table_Names”列

现在,我想编写一个查询“Columns”表的查询,并查找“Column_Name”,最后四个字符为“test”。以下是我的查询:

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

现在我想编写一个删除查询,该查询将删除上述查询输出中“Table_Names”列中列出的所有表中的数据,其中,最后四个字符“test”的列具有“del”作为数据。

我该怎么做?

1 个答案:

答案 0 :(得分: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