【问题标题】:dynamic sql and store output in variable动态sql并将输出存储在变量中
【发布时间】:2011-06-12 15:13:16
【问题描述】:
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 sql-server sql-server-2005 tsql dynamic-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, @XMLValue=@XMLValueString output
SELECT @XMLValueString

【讨论】:

    【解决方案2】:

    对于其他尝试关注该问题的人,这里有一些示例表可供使用

    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 (original!)

    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
    

    【讨论】:

    • 对不起,你的把戏不起作用。请在 sql server management studio 中检查一次。这里我尝试根据声明@Xml xml 声明@SQL nvarchar(100) set @SQL = 'select * from Emp FOR XML AUTO, ELEMENTS, ROOT(''customers'')' exec sp_executesql @SQL,N'@XML xml output', @xml output select @xml 但是当我发出 select @xml 它显示 null 而不是 xml 数据。
    • 您在脚本中看到Set @XML = 了吗?你需要它。
    【解决方案3】:

    实际上没有任何方法可以从动态 sql 回到调用进程而不闻起来像一个巨大的 hack。

    如果你绝对必须,我想你可以有一个表,你的脚本可以将它的值写入,然后你的 proc 可以从中读取。

    你可能想考虑在 sql server 之外做你的动态工作,但即使这样也充满了危险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多