2014-11-06 5 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

Предполагая, что у вас на самом деле есть таблицы в вашем db, называемые книгами, журналами и эссе, и вы хотите удалить их или сделать запрос на них, вам нужно использовать динамический sql. Не уверен, как это делается в MySQL, но в SQL-Server это было бы так (очень упрощенный пример):

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

Ahh! Только то, что мне было нужно. Спасибо. – Rail24

+0

Просто будьте осторожны, когда вы получаете данные для @TableName. Вы можете открыть себе SQL-инъекцию. – SQLburn

Смежные вопросы