Итерация по всем таблицам - PullRequest
       0

Итерация по всем таблицам

0 голосов
/ 29 августа 2018

Я ищу способ перебора всех таблиц в базе данных.

Я до сих пор придумал это:

DECLARE @TableName VARCHAR(MAX)

DECLARE MyCursor CURSOR 
    FOR
        SELECT 
        DISTINCT TABLE_NAME 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_CATALOG ='MyDB' 
        AND TABLE_SCHEMA=N'dbo'

OPEN MyCursor

FETCH NEXT FROM MyCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT *
    FROM @TableName
    FETCH NEXT FROM MyCursor INTO @TableName
END 
CLOSE MyCursor
DEALLOCATE MyCursor

Я получаю сообщение об ошибке в операторе while The @TableName tablevariable must be declared (перевод с немецкого).

Я знаю, что должна быть переменная типа TABLE в FROM @TableName, но я не нашел, как это сделать, просто как объявить новые таблицы, которые мне не нужны.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Чтобы выполнить select во всех ваших таблицах, вы должны использовать динамический SQL, как упоминалось в другом ответе. Кроме того, вам не нужен курсор вообще! :)

Попробуйте это:

declare @sql varchar(max) = '';

select @sql = @sql + 'select * from ' + TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' ' 
from information_schema.tables

exec(@sql)
0 голосов
/ 29 августа 2018

Вы не можете SELECT * FROM @TableName

вам нужно будет использовать Dynamic SQL

declare @sql nvarchar(max)

SELECT @sql = 'SELECT * FROM ' + QUOTENAME(@TableName)

exec sp_executesql @sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...