2014-11-06 47 views
0

我不相信我的標題能夠準確反映我的問題,但這裏是我有:如何循環訪問SQL表?

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

假設你的數據庫實際上有名爲books,雜誌和散文的表,並且你想從它們中刪除或者對它們做一些查詢,你需要使用動態sql。不知道它如何在MySQL中完成,但在SQL-Server中,它會是這樣的(高度簡化的例子):

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

啊!正是我需要的。謝謝。 – Rail24 2014-11-06 22:01:27

+0

請注意您獲取@TableName的數據的位置。你可以打開自己的SQL注入。 – SQLburn 2014-11-06 23:12:51