5

SQL Server 2005から複数のテーブルをクエリし、単一のXMLドキュメントを作成して、ストアドプロシージャでこれを実行したいと思います。

DataSetストアドプロシージャ内の複数のテーブルをクエリして、XMLとして簡単に保存できる.NETアプリケーションでを取得できることを知っています。ただし、ストアドプロシージャのコンテキスト内で同様のことを実行しようとしています。

基本的に私はこのようなことをしたいです:

declare @x xml
select @x = x.result
from (select y.* from tabley y for xml path('y')
      union
      select a.* from tablea a for xml path('aa')
     ) as x
select @x
4

3 に答える 3

14

If you want them just one after the other, you can try something like this:

SELECT
    (SELECT y.* FROM dbo.TableY FOR XML PATH('y'), TYPE) AS 'YElements',
    (SELECT a.* FROM dbo.TableA FOR XML PATH('aa'), TYPE) AS 'AElements'
FOR XML PATH(''), ROOT('root')

That return an XML something like:

<root>
   <YElements>
     <Y>
       ....
     </Y>
     <Y>
       ....
     </Y>
      ......
   </YElements>
   <AElements>
     <A>
       ....
     </A>
     <A>
       ....
     </A>
      ......
   </AElements>
</root>
于 2012-08-09T16:10:55.827 に答える
1
SELECT                                                               -- Root Starts
   (SELECT  '1' AS ErrorCode FOR XML PATH(''), TYPE) AS 'Results',   -- Level 1 Starts
       (select                                                       -- Level 2 Starts
             (select      '1'         CustomerID,                    -- Level 2 Detail Starts
                          'John'      CustomerName,
                          'Doe'       CustomerLastname,
                          'Y'         Active
              for xml path('Customers'), type) AS 'Customer'         -- Level 2 Detail Ends
       for xml path(''), TYPE) AS 'Response'                         -- Level 2 Ends
   FOR XML PATH('')                                                  -- Level 1 Ends
,ROOT('BaseXML')                                                     -- Root Ends
于 2017-03-14T19:36:38.420 に答える
0

SQLサーバーでテーブルXMLを変換します。

Declare @RESULTXML XML
Declare @SMS_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))
Declare @EMAIL_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))
Declare @ODP_REGISTER TABLE([id] VARCHAR(30),[status] VARCHAR(30))

Select @RESULTXML =( 
SELECT (SELECT * FROM @SMS_REGISTER FOR XML PATH('sms'), TYPE) AS 'smss',
         (SELECT * FROM @EMAIL_REGISTER FOR XML PATH('email'), TYPE) AS         'emails',
         (SELECT * FROM @ODP_REGISTER FOR XML PATH('odp'), TYPE) AS 'odps'
    FOR XML PATH('subroot'), ROOT('root') )

このようにXMLを返す

    <ルート>
       <サブルート>
        <smss>
          <sms>
            <id> NT0000000020 </ id>
            <status>登録済み</status>
          </ sms>
          <sms>
            <id> NT0000000021 </ id>
            <status>登録済み</status>
          </ sms>
          <sms>
            <id> NT0000000022 </ id>
            <status>登録済み</status>
          </ sms>
          <sms>
            <id> NT0000000023 </ id>
            <status>登録済み</status>
          </ sms>
        </ smss>
        <メール>
          <メール>
            <id> NT0000000024 </ id>
            <status>登録済み</status>
          </ email>
          <メール>
            <id> NT0000000025 </ id>
            <status>登録済み</status>
          </ email>
        </メール>
      </ subroot>
     </ root>
   

于 2014-02-24T11:30:29.077 に答える