我需要對多個數據庫進行查詢。我得到了構建每個數據庫的查詢的部分,但現在我需要將結果放在每個查詢的某些內容中,然後我可以將其返回。SQL Server:如何使用未知列的dataype /名稱創建臨時表?
@requete是查詢
ALTER PROCEDURE [dbo].[RequeteMultiBd]
@requete varchar(max)
AS
BEGIN
--get server + database name
select dbo.trim(Serveur)+'.'+ dbo.trim(db) as name, row_number() over (order by db) seq into #tmp from dbo.DataBase;
declare @name sysname
declare @sql nvarchar(max)
declare @seq int
set @seq = 0
--getting the next name and seq
select top 1 @name = name, @seq = seq
from #tmp where seq > @seq order by seq
set @sql = replace(@requete, '<bd>', @name);
--Trying to init the table (that part doesnt work)
insert into #result exec(@sql);
--Filling up the table
WHILE (1=1)
BEGIN
select top 1 @name = name, @seq = seq
from #tmp where seq > @seq order by seq
if(@@rowcount = 0) break;
set @sql = replace(@requete, '<bd>', @name);
insert into #result exec(@sql);
END
select * from #result
END
從這個代碼我得到這個錯誤,因爲#result不會退出。我需要用動態列名創建它,但是如何?
無效的對象名稱#result「使用
SELECT .... INTO #Result FROM ...
這將創建具有正確列的表
什麼是「...」? 我tryed:從exec(@sql)選擇*到#result; 但我得到: 關鍵字'exec'附近的語法錯誤。 – 2009-08-11 15:42:25
Requete看起來像動態SQL。 你可以把INTO放在exec()裏面。像這個exec('SELECT * INTO'結果FROM('+ @requete +')R – pjp 2009-08-11 15:54:44
實際上,在執行後聲明的#Result對調用存儲過程是不可見的......對不起。 – pjp 2009-08-11 16:15:50