首页 > 解决方案 > 将数据数组发送到 PHP 中的 SQL Server 存储过程

问题描述

我在 SQL Server 数据库中有以下两个表:

发票表

ID    | INVOICE_NO |
--------------------
1     | 1000000001 |
2     | 1000000002 |
3     | 1000000003 |

invoice_details 表

ID    | INVOICE_ID | DESCRIPTION | AMOUNT |
-------------------------------------------
1     | 1          | Electricity | 3500.00|
2     | 1          | Telephone   |  750.00|
3     | 2          | Car Service | 6500.00|
4     | 2          | Other       | 1500.00|

我想使用 PHP 脚本将上述详细信息导出到 SQL Server 存储过程。发送时,我想从表中选择第一行并从invoices表中选择相关的两行invoice_details(同样)。所以invoice_details必须在数组或其他东西中。

我的问题是;

  1. 如何使 SQL Server 存储过程完成这项工作?
  2. 如何发送这些详细信息(我可以使用数组将发票详细信息与发票数据一起发送)?

如果有人对此有任何想法,请指导。

标签: phpsql-serversql-server-2008sqlsrv

解决方案


根据@AlwaysLearning 给出的想法,我能够使用 XML 解决我的问题。

CREATE Procedure [dbo].[insert_xml_data]
(
    @details AS XML = '
    <details>
        <invoice_details>
            <line_id>3</line_id>
            <account_code>5000</account_code>
            <description>Other purchases</description>
            <amount>15250.00</amount>
        </invoice_details>
    </details>
    ';
)
As

BEGIN
    
    INSERT INTO xml_data (account_code,description,amount)
        SELECT  
    t1.c.value('account_code[1]','varchar(100)') As account_code, 
    t1.c.value('description[1]','varchar(50)') as description, 
    t1.c.value('amount[1]','varchar(50)') as amount,
    FROM @details.nodes('/details/invoice_details') t1(c)
END

推荐阅读