Как пройти курсор, чтобы выполнить логику для нескольких таблиц? (Имена таблиц находятся в курсоре) - PullRequest
0 голосов
/ 22 ноября 2010

У меня такое ощущение, что это довольно простая работа с базой данных, но это не для меня.Я пытаюсь получить список всех моих таблиц-надгробий из системных таблиц и сохранить результаты в курсоре.Затем я пытаюсь выполнить некоторую логику для каждой из этих таблиц, у меня возникают проблемы при этом.

Любая помощь будет принята с благодарностью.

Вот ошибка, которую я получаю: Должен объявитьпеременная таблицы "@tablename"

Вот код:

declare tombstonetables cursor for 
(select name from sys.objects
where 
name like'%tombstone%'
and type = 'U'--for user_table
)

Print 'Begin purging tombstone tables'

declare @tablename varchar(250)
open tombstonetables

fetch next from tombstonetables into @tablename

WHILE @@FETCH_STATUS = 0
begin
select * from @tablename--real logic goes here later

fetch next from tombstonetables into @tablename

end
close tombstonetables

deallocate tombstonetables

1 Ответ

5 голосов
/ 22 ноября 2010

Похоже, вам нужно использовать Динамический SQL

Вот ссылка на простой переход по http://www.mssqltips.com/tip.asp?tip=1160

Возможно, вам понадобится использовать sp_executesql

Вот простой пример использования Dynamic SQL с вашим примером

DECLARE @DynamicSQL nvarchar(100)

WHILE @@FETCH_STATUS = 0
begin
SET @DynamicSQL = 'select * from ' + @tablename --real logic goes here later
EXEC @DynamicSQL
fetch next from tombstonetables into @tablename

end
...