Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表中列出的表名中删除数据的查询_Sql_Sql Server 2008 - Fatal编程技术网

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

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' 现在我想写一个删除查询,它

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

现在,我想写一个查询,它查询“Columns”表并查找最后四个字符为“test”的“Column\u Name”。以下是我的疑问:

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