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


Вы не можете 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)
Вы можете использовать
INFORMATION_SCHEMA.TablesвместоINFORMATION_SCHEMA.COLUMNS.