我正在尋找從具有字段名稱criteria1的許多表中拉出特定行。我遇到的問題是,當我將所有者和表名稱結合起來並嘗試調用「從@t where linenum = 1中選擇條件1」時,SQL希望@t是一個表。我需要知道如何構建完整的表名,然後將其傳遞給此查詢。我知道我可以使用編程語言來訪問數據庫,但是我需要使用SQL。如果有人知道這樣做的更好方式,那也會很棒。在SQL中構建FROM
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
作爲一個方面說明,你需要非常小心任何可能的注射時,去這條路線。 – 2009-07-16 19:12:17
@Chris +1 - 但是如果MisterBigs從sysobjects中提取表名,他應該沒問題。除非有人創建了一個名爲'dual; drop table students'的表格;''http://xkcd.com/327/ – banjollity 2009-07-16 19:18:27
構建字符串時使用QUOTENAME(@T)。 – 2009-07-16 19:41:38