我有一个数据库“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”作为数据。
我该怎么做?
答案 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