2011-01-20 8 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) –

答えて

3

は、このスクリプトは、変数@XML に生成されたXMLを格納

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' 

を使用するには、いくつかのサンプルテーブルです(元!)

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管理スタジオで一度確認してください。ここで私は に従ってみてください。@XML xml 宣言@SQL nvarchar(100) @SQL = 'select *からEmpを選択します。XML AUTO、ELEMENTS、ROOT('顧客 ')' exec sp_executesql @ SQL、N '@XML xml output'、@xml出力 は@xmlを選択しますが、select @ xmlを発行するとxmlデータの代わりにnullが表示されます。 – Thomas

+0

スクリプトに 'Set @XML ='がありますか?君はそれが要る。 – RichardTheKiwi

0

ダイナミックSQLから巨大なハックのような臭いがない呼び出しプロセスに戻る方法はありません。

絶対に必要な場合は、あなたのスクリプトが値を書き込むテーブルを用意しておき、あなたのprocを読み込むことができると思います。

SQL Serverの外部で動的な作業を行うことを検討することをお勧めしますが、それでも危険に満ちています。ここで、疑問に従うことをしようとする他の誰のために

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 
関連する問題