2011-01-20 76 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