Sql server 如何循环遍历SQL表?

Sql server 如何循环遍历SQL表?,sql-server,tsql,sql-delete,Sql Server,Tsql,Sql Delete,我不相信我的头衔准确地代表了我的问题,但以下是我所拥有的: DECLARE @ListOfTables TABLE( RowID INT NOT NULL PRIMARY KEY IDENTITY(1,1) , TableName VARCHAR(200) ) DECLARE @RowsToProcess INT DECLARE @CurrentRow INT DECLARE @TableName VARCHAR(200) INSERT INTO @ListOfTables

我不相信我的头衔准确地代表了我的问题,但以下是我所拥有的:

DECLARE @ListOfTables TABLE(
    RowID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
    , TableName VARCHAR(200)
)

DECLARE @RowsToProcess INT
DECLARE @CurrentRow INT
DECLARE @TableName VARCHAR(200)


INSERT INTO @ListOfTables (TableName)
VALUES ('Books')
INSERT INTO @ListOfTables (TableName)
VALUES ('Magazines')
INSERT INTO @ListOfTables (TableName)
VALUES ('Essays')

SET @RowsToProcess = @@ROWCOUNT 
SET @CurrentRow = 0
然后我想循环浏览这个表并删除它

WHILE @CurrentRow < @RowsToProcess
BEGIN 
    SET @CurrentRow = @CurrentRow+1

    SELECT @TableName = TableName
    FROM @ListOfTables
    WHERE RowID = @CurrentRow

    DELETE FROM @TableName

END
而@CurrentRow<@RowsToProcess
开始
设置@CurrentRow=@CurrentRow+1
选择@TableName=TableName
来自@ListOfTables
其中RowID=@CurrentRow
从@TableName中删除
结束
实际上,我的delete不仅仅是删除表,它有特定的条件。为了便于演示,我对其进行了简化

我在这里得到的错误是:
必须声明变量“@TableName”。

我将其移动到WHILE循环中,收到了相同的错误


我能在这里做什么?有可能做到我想做的吗?

假设您的数据库中确实有表,这些表被命名为书籍、杂志和文章,并且您想从中删除它们,或者对它们进行查询,那么您需要使用动态sql。不确定在MySQL中是如何实现的,但在SQL Server中,它是这样的(高度简化的示例):


啊!正是我需要的。谢谢。在获取@TableName的数据时要小心。您可以打开自己的sql注入。
SET @sql = 'DELETE FROM ' + @TableName;
EXEC (@sql);