Я знаю, что использование курсоров - плохая идея, но я просто не знаю, как это решить. Я хотел бы перебрать мой список таблиц (select [table_name] from information_schema.tables
) и выдать конкретный оператор select
для каждого из них.SQL Server: Итерация по всем таблицам, содержащимся в базе данных
Вот моя попытка:
DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR
SELECT [TABLE_NAME]
FROM INFORMATION_SCHEMA.TABLES
WHERE [TABLE_NAME] like 'TS%'
DECLARE @tableName char(7)
OPEN c
FETCH NEXT FROM c INTO @tableName
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- which distinct ports has been used by inbound connections (listening sockets)?
SELECT [protocol], [src_ip], [dst_ip], [src_port], [dst_port], [path]
FROM (SELECT *, ROW_NUMBER() over (partition by [dst_port], [protocol] order by [id]) as RowNumber
FROM @tableName -- <<<<<< THIS IS WHERE IT FAILS
where [path] = 'RECEIVE') as a
WHERE a.RowNumber = 1 order by [dst_port];
FETCH NEXT FROM c into @tableName
END
CLOSE c
DEALLOCATE c
Это терпит неудачу с
Необходимо объявить переменную таблицы "@tableName"
Что было бы лучшим способом "итерация" как «foreach» над моими столами? Заранее спасибо
Ошибка вызвана тем, что мы не можем иметь SELECT * FROM @variable в сервере SQL. нам нужно будет использовать динамический sql для выполнения этого запроса. Добавление комментария, поскольку я не видел этого нигде. – nee21