Sql 从表中列出的表名中删除数据的查询
我有一个数据库“Student”,其中包含大约20个表。 其中一个表是“Columns”,它将“Student”数据库中所有表的所有列名存储在“column_names”列中。此表还将表名存储在“表名”列中 现在,我想写一个查询,它查询“Columns”表并查找最后四个字符为“test”的“Column\u Name”。以下是我的疑问:Sql 从表中列出的表名中删除数据的查询,sql,sql-server-2008,Sql,Sql Server 2008,我有一个数据库“Student”,其中包含大约20个表。 其中一个表是“Columns”,它将“Student”数据库中所有表的所有列名存储在“column_names”列中。此表还将表名存储在“表名”列中 现在,我想写一个查询,它查询“Columns”表并查找最后四个字符为“test”的“Column\u Name”。以下是我的疑问: SELECT * FROM Students.Columns WHERE Column_Name Like '%test' 现在我想写一个删除查询,它
SELECT *
FROM Students.Columns
WHERE Column_Name Like '%test'
现在我想写一个删除查询,它将删除上面查询输出中“Table_Names”列中列出的所有表中的数据,其中,最后四个字符为“test”的列将“del”作为数据
如何实现这一点?您需要在每个条目上循环,构建一个动态查询,并使用sp_executesql执行它。这应该有效(未经测试):
“del”不是列名,“del”是列中的数据。数据为“del”的列需要删除。我读错了,我错了。但是,数据不会被删除。我打开了列名为'text'的最后四个字符的表,其中的数据为'del',它仍然存在。这是否只是删除了临时表中的内容,而不是原始内容?您上次的评论是“文本”还是“测试”?您可能需要执行一些调试输出,以查看初始
#Temp
表包含的内容,也可以在执行sp_executesql
之前查看@Column_Name和@table_Name变量使用的值。我设置的参数不正确-请尝试更新的SQL代码。我得到了一个“靠近“+”的错误语法。”on:N'DELETE FROM'+(at)TABLE_NAME+N',其中'+(at)COLUMN_NAME+N'=(at)DELETE_key',
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