如何使用PHP将数组传递给SQL Server

时间:2017-09-18 17:01:03

标签: php sql-server sql-server-2014

美好的一天,

如果我在SQL Server中有以下代码:

CREATE TYPE PartList
AS TABLE
(
    PartID varchar(30),
    Quantity int
);
GO

CREATE PROC spInsertPartList
@List AS PartList READONLY
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO Part (PartID, Quantity)
    VALUES (SELECT PartID, Quantity FROM @List)

END
GO

我现在可以从PHP调用此过程,说明如下内容:

$array = array('PartNr123' => 50, 'PartNr25' => 4);
$stmt = mssql_init('spInsertPartList');
mssql_bind($stmt,'@List', &$array, PartList, false,  false);
mssql_execute($stmt);

我找到了SQL语句here的代码,但遗憾的是代码示例适用于C#DataTable。

编辑:

此外,执行SQL脚本时出现以下错误:

Msg 2715, Level 16, State 3, Procedure InsertStockTake, Line 194
Column, parameter, or variable #1: Cannot find data type dbo.CallPartList

还有这个:

Msg 1087, Level 16, State 1, Procedure InsertStockTake, Line 200
Must declare the table variable "@partList".

这是由以下代码引起的:

CREATE PROC dbo.InsertStockTake
@partList AS dbo.CallPartList READONLY
AS
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION
            DECLARE @partNr varchar(15), @qtyCount smallint, @qtyDB smallint
            DECLARE curStock CURSOR FOR (SELECT PartNr, Qty FROM @partList)
            OPEN curStock
            FETCH NEXT FROM curCallPart INTO @partNr, @qtyCount
            WHILE @@FETCH_STATUS = 0
                BEGIN           
                    SELECT @qtyDB = StockOH FROM dbo.Stock WHERE PartNr = 
                       @partNr
                    INSERT INTO scArchive.StockLevel(PartNr, 
                       StockOHDatabase, StockOHCounted, DateCaptured) 
                        VALUES (@partNr, @qtyDB, @qtyCount, GETDATE())
                    FETCH NEXT FROM curCallPart INTO @partNr, @qtyCount
                END
            CLOSE curStock
            DEALLOCATE curStock
        COMMIT
    END TRY
    BEGIN CATCH
        THROW;
        ROLLBACK
    END CATCH
END
GO

提前谢谢

1 个答案:

答案 0 :(得分:0)

不再需要这个问题了。我在php中使用了mysqli_ *并调整了我的表结构并转移到MySQL而不是MS SQL