2011-01-20 109 views
0
declare @SQL nvarchar(100) 
set @SQL = '' 

select @SQL = @SQL + FieldName + ' as [' + Description + '], ' 
from FieldsInfo 
where TableName = 'Emp' 

set @SQL = 'select '+ left(@SQL, len(@SQL)-1) + ' from Emp FOR XML AUTO, ELEMENTS, ROOT(''customers'')' 

exec sp_executesql @SQL 

上面是動態sql,當它由sp_executesql執行時,那麼我得到的輸出爲xml。 如果我想將xml存儲在一個變量中。所以然後我需要添加在我的tsql腳本....請幫助動態sql和存儲輸出變量

+3

可能的重複[如何獲得sp_execut esql結果到一個變量?](http://stackoverflow.com/questions/803211/how-to-get-sp-executesql-result-into-a-variable) – 2011-01-20 17:32:58

回答

3

其他任何人試圖跟隨的問題,這裏有一些示例表使用

create table emp (a varchar(10), b int, id int identity) 
insert emp select 'abc', 1 
insert emp select 'def', 2 
create table fieldsinfo (tablename sysname, description sysname, fieldname sysname) 
insert fieldsinfo select 'emp', 'field 1', 'a' 
insert fieldsinfo select 'emp', 'field 2', 'b' 

這個腳本保存生成的XML到變量@XML (原創!)

declare @SQL nvarchar(max) 
set @SQL = '' 

select @SQL = @SQL + FieldName + ' as [' + Description + '], ' 
from FieldsInfo 
where TableName = 'Emp' 

set @SQL = 'set @XML = (select '+ left(@SQL, len(@SQL)-1) + ' from Emp FOR XML AUTO, ELEMENTS, ROOT(''customers''))' 

declare @Xml xml 
exec sp_executesql @SQL, N'@XML xml output', @xml output 

select 'I have >>> ', @Xml -- check contents 
+0

對不起你的伎倆不起作用。請在sql server management studio中檢查一次。這裏我嘗試根據 declare @Xml xml declare @SQL nvarchar(100) set @SQL ='select * from Emp FOR XML AUTO,ELEMENTS,ROOT(''customers'')' exec sp_executesql @ SQL,N '@XML xml output',@xml輸出 select @xml但是當我發出select @xml時,它顯示null而不是xml數據。 – Thomas 2011-01-20 18:52:12

0

沒有真正的任何方式從動態SQL返回到調用過程沒有它聞起來像一個巨大的黑客。

如果你絕對必須,我想你可以有一個表,你的腳本可以寫它的值,然後你的proc可以讀取。

你可能想考慮做你的動態的東西以外的SQL服務器,但即使這是充滿危險。

1

試試這個:

declare @SQL nvarchar(1000) 
set @SQL = '' 

select @SQL = @SQL + FieldName + ' as [' + Description + '], ' 
from FieldsInfo 
where TableName = 'Emp' 


DECLARE @ParmDefinition nvarchar(1000); 
DECLARE @XMLValueString varchar(1000); 
SET @ParmDefinition = N'@XMLValue varchar(1000) OUTPUT'; 
set @SQL = 'SELECT @XMLValue = (select '+ left(@SQL, len(@SQL)-1) + ' from Emp FOR XML AUTO, ELEMENTS, ROOT(''customers''))' 
print @SQL 
exec sp_executesql @SQL,@ParmDefinition, @[email protected] output 
SELECT @XMLValueString