Перебрать все таблицы

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

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

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, но я не нашел, как это сделать, просто как объявить новые таблицы, которые мне не нужны.

Вы можете использовать INFORMATION_SCHEMA.Tables вместо INFORMATION_SCHEMA.COLUMNS.

Nisarg 29.08.2018 10:40

Возможно, вы захотите выполнить поиск sp_MSforeachtable в Интернете.

MJH 29.08.2018 10:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

declare @sql nvarchar(max)

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

exec sp_executesql @sql

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

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

declare @sql varchar(max) = '';

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

exec(@sql)

Другие вопросы по теме