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);