Я ищу, чтобы вытащить определенную строку из числа таблиц, имеющих критерии имени поля1. Проблема, с которой я сталкиваюсь, заключается в том, что когда я совмещаю имя владельца и таблицы и пытаюсь вызвать «select criteria1 from @t где linenum = 1», SQL ожидает, что @t будет таблицей. Мне нужно знать, как построить полное имя таблицы, а затем передать ее этому запросу. Я знаю, что могу использовать язык программирования для доступа к БД, но мне нужно, чтобы это было в SQL. Если кто-то знает лучший способ сделать это, это тоже будет здорово.Построение FROM в SQL
declare @next as varchar
declare @owner varchar
while 1=1
begin
set @next = (select top 1 o.name FROM syscolumns c inner join sysobjects o on c.id = o.id
where c.name = 'criteria1' and o.id > @next order by o.id)
if @next is null
break
else
begin
set @owner = (select top 1 u.name
FROM syscolumns c inner join
sysobjects o on c.id = o.id left join
sysusers u on o.uid=u.uid
where c.name = 'criteria1' and o.id = @next order by o.id)
declare @t as varchar
set @t = @owner+'.'[email protected]
select criteria1 from @t where linenum = 1
end
continue
end
В качестве примечания стороны, вы должны очень осторожно относиться к любой возможной инъекции при движении по этому маршруту. –
@Chris +1 - но если MisterBigs вытаскивает tablenames из sysobjects, он должен быть в порядке. Если кто-то не создал таблицу с именем «dual; drop table students», - http://xkcd.com/327/ – banjollity
Используйте QUOTENAME (@T) при построении строки. –