在SQL Server过程中循环值并将每个值传递给查询的最佳方法

在SQL Server过程中循环值并将每个值传递给查询的最佳方法,sql,sql-server,Sql,Sql Server,我有一个select查询,它返回一个表名列表。我想将每个表名传递给drop table查询,以便可以删除该表。我可以用临时表。这是最好的方法吗?还有其他方法吗?有点危险,请确保使用指定的数据库。。。 或者用查询替换select from SYS.tables以返回表名 USE [ENTERDATEBASENAME] IF OBJECT_ID('tempdb..#TEMP_DROP') IS NOT NULL DROP TABLE #TEMP_DROP; SELECT * INTO #TEM

我有一个
select
查询,它返回一个表名列表。我想将每个表名传递给
drop table
查询,以便可以删除该表。我可以用临时表。这是最好的方法吗?还有其他方法吗?

有点危险,请确保使用指定的数据库。。。 或者用查询替换select from SYS.tables以返回表名

USE [ENTERDATEBASENAME]
IF OBJECT_ID('tempdb..#TEMP_DROP') IS NOT NULL DROP TABLE #TEMP_DROP;   
SELECT * INTO #TEMP_DROP FROM SYS.tables

WHILE EXISTS(SELECT TOP 1 * FROM #TEMP_DROP)
BEGIN
    DECLARE @TABLEBNAME VARCHAR(MAX),@SQL VARCHAR(MAX)
    SET @TABLEBNAME = (SELECT TOP 1 [NAME] FROM #TEMP_DROP)
    SET @SQL = 'DROP TABLE ' +  @TABLEBNAME
    EXEC(@SQL)
    DELETE FROM #TEMP_DROP where [name] = @TABLEBNAME
END

我不会用循环来做这个。在这里使用游标要比使用简单的动态sql编写的代码多得多,无论如何,您都需要使用动态sql。但是请记住,如果您有外键,删除一堆表可能会有问题。您需要删除这些外键或按特定顺序删除表

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'drop table ' + quotename(TableName) + ';'
from YourQueryThatGivesYouTableNames

exec sp_executesql @SQL

你在说多少张桌子?现在我有300到400张桌子,将来可能会增加。。