我如何循环SQL表?

时间:2014-11-06 21:38:46

标签: 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 (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

实际上,我的删除并不仅仅是删除表格 - 它具有特定的标准。我已将其简化为演示目的。

我在这里得到的错误是:Must declare the variable '@TableName'.

我已将其移至WHILE循环中并收到相同的错误。

我可以在这做什么?是否有可能做我想做的事情?

1 个答案:

答案 0 :(得分:1)

假设您的数据库中实际上有表名为书籍,杂志和论文,并且您想从中删除它们,或者对它们进行一些查询,则需要使用动态SQL。不确定它是如何在MySQL中完成的,但在SQL-Server中,它就像这样(高度简化的例子):

SET @sql = 'DELETE FROM ' + @TableName;
EXEC (@sql);