sql >> データベース >  >> RDS >> Sqlserver

SQL Server クエリを使用して XML をエクスポートする方法は?

    XML を保存するだけで、他に何もする必要がない場合は、単純な ADO.NET を使用してこれを行うのがおそらく最も簡単な方法です。

    string query = "SELECT EmployeeID, LastName, FirstName, Title, BirthDate, HireDate FROM dbo.Employees FOR XML AUTO";
    
    using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;integrated security=SSPI;"))
    using (SqlCommand _cmd = new SqlCommand(query, _con))
    {
        _con.Open();
        string result = _cmd.ExecuteScalar().ToString();
        _con.Close();
    
        File.WriteAllText(@"D:\test.xml", result);
    }
    

    これにより、ファイル D:\test.xml が作成されます (またはシステムに合わせて変更します)、それらの XML タグをそのファイルに挿入します。

    SqlCommand オブジェクトには .ExecuteXmlReader() もあります XmlReader を返すメソッド XML をスキャンして操作するためのオブジェクト - 文字列を返すだけではありません。あなたにとって最も意味のあるものを使用してください!

    PS:また、FOR XML AUTO の出力 は少し....言いましょう...最適ではありません。 dbo.Employee を使用します これはメインの XML タグなどです... SQL Server 2008 では、 FOR XML PATH の使用を検討することを強くお勧めします 代わりに、XML 出力のレイアウトを調整およびカスタマイズできます。

    元の XML 出力を FOR XML AUTO と比較します

    <dbo.Employees _x0040_ID="1" LastName="Davolio" FirstName="Nancy" Title="Sales Representative" BirthDate="1948-12-08T00:00:00" HireDate="1992-05-01T00:00:00" />
    <dbo.Employees _x0040_ID="2" LastName="Fuller" FirstName="Andrew" Title="Vice President, Sales" BirthDate="1952-02-19T00:00:00" HireDate="1992-08-14T00:00:00" />
    

    このクエリに対して - 違いを確認するだけです:

    SELECT 
        [EmployeeID] AS '@ID',
        [LastName], [FirstName],
        [Title],
        [BirthDate], [HireDate]
    FROM 
        [dbo].[Employees]
    FOR XML PATH('Employee'), ROOT('Employees')
    

    出力は次のとおりです:

    <Employees>
      <Employee ID="1">
        <LastName>Davolio</LastName>
        <FirstName>Nancy</FirstName>
        <Title>Sales Representative</Title>
        <BirthDate>1948-12-08T00:00:00</BirthDate>
        <HireDate>1992-05-01T00:00:00</HireDate>
      </Employee>
      <Employee ID="2">
        <LastName>Fuller</LastName>
        <FirstName>Andrew</FirstName>
        <Title>Vice President, Sales</Title>
        <BirthDate>1952-02-19T00:00:00</BirthDate>
        <HireDate>1992-08-14T00:00:00</HireDate>
      </Employee>
    


    1. 12c廃止された機能

    2. PHPStormでMySQLデータソースに接続する

    3. pdo lastInsertIdはzero(0)を返します

    4. MySQLの日付に従って2つのテーブルから合計をグループ化します