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脚本中添加....请帮助
答案 0 :(得分: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
答案 1 :(得分: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, @XMLValue=@XMLValueString output
SELECT @XMLValueString
答案 2 :(得分:0)
没有任何方法可以从动态sql返回到调用进程,而不会像一个巨大的黑客那样闻起来。
如果你绝对必须,我想你可以有一个表格,你的脚本可以写出它的值,然后你的proc可以读取。
你可能想考虑在sql server之外做一些动态的东西,但即使这样也充满了危险。