插入不适用于SQL Server但没有错误

时间:2014-01-31 20:13:25

标签: php sql-server triggers

我正在开发某人的其他数据库,创建一个简单的PHP解决方案,运行Apache(XAMPP + Windows 2003 Server),连接到运行Windows 2008 R2的MS SQL SERVER数据库。

我已经工作了几天,我已经创建了几个表,我已经在这些表上插入了数据,但现在我正在尝试使用PHP将数据插入到现有表中,但对于此表中的特别是insert语句根本不起作用,但没有错误信息。

这是代码。

    <?php

    include '../../includes/mssql.php';

    $insereItem = "INSERT INTO TBL_NOTAS_FATURAMENTO_ITENS (CD_LANCAMENTO   ......... ) VALUES (26452,.....0)";

$stmt = sqlsrv_query( $conn, $insereItem);
if( $stmt === false ) {
     die( print_r( sqlsrv_errors(), true));
}

echo $insereItem . "\n";

?>

没有错误消息。

正如您所看到的,我已从insert语句中删除了数据,因此此处不会占用太多空间(要插入88个值)。没有错误消息,Apache日志中没有错误,php日志中没有错误,但数据未被提交。

正如您所看到的,我对语句执行了“回显”,因此如果我在SQL Server Management Studio中复制并粘贴该语句,则插件可以正常工作,但如果我尝试使用PHP,它将无效。

我正在尝试插入数据的表有一个插入触发器,我很确定这是问题,因为如果我禁用触发器,那么插件就可以正常工作(因此构建时没有错误插入命令)。

我已经尝试使用其他sqlsrv_命令,使用begin连接,准备,执行然后提交,结果是相同的。 sqlsrv_execute返回true,sqlsrv_prepare返回

PS:真正的代码不是上面那个,因为真正的代码使用数组来解析参数,但最终的insert语句是相同的,并且问题发生在任何一种方式。

以下是插入触发器的代码:(正如我之前所说,数据库不是由我构建的)

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER  TRIGGER [TRG_TBL_NOTAS_FATURAMENTO_ITENS_REGINSERIR] ON [dbo].[TBL_NOTAS_FATURAMENTO_ITENS] 
FOR INSERT
AS

    IF EXISTS (SELECT 'TRUE' FROM INSERTED)
        BEGIN

--SET NOCOUNT ON
--IF @@ROWCOUNT=0 RETURN

            DECLARE @CD_LANCAMENTO      AS INT
            DECLARE @CD_FILIAL          AS INT
            DECLARE @CD_ITEM            AS INT
            DECLARE @CD_CME             AS INT
            DECLARE @CD_MATERIAL        AS INT
            DECLARE @CD_EMPRESA         AS INT
            DECLARE @CD_ID              AS INT
            DECLARE @DT_EMISSAO         AS DATETIME

            SELECT @CD_LANCAMENTO =     (SELECT CD_LANCAMENTO   FROM INSERTED)
            SELECT @CD_EMPRESA =        (SELECT CD_EMPRESA      FROM DBO.TBL_NOTAS_FATURAMENTO   WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))
            SELECT @CD_FILIAL =         (SELECT CD_FILIAL       FROM DBO.TBL_NOTAS_FATURAMENTO   WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))
            SELECT @CD_ITEM =           (SELECT CD_ITEM         FROM INSERTED)
            SELECT @CD_CME =            (SELECT CD_CME          FROM INSERTED)
            SELECT @CD_MATERIAL =       (SELECT CD_MATERIAL     FROM INSERTED)
            SELECT @CD_ID =             (SELECT CD_ID           FROM INSERTED)
            SELECT @DT_EMISSAO =        (SELECT DT_EMISSAO      FROM DBO.TBL_NOTAS_FATURAMENTO   WHERE (CD_LANCAMENTO = @CD_LANCAMENTO))

            --CALCULA IMPOSTOS
            EXEC SP_CALCULA_IMPOSTOS_NOTAS_FATURAMENTO @CD_LANCAMENTO, @CD_ITEM, @CD_CME, @CD_MATERIAL

            --TOTAL DO LANCAMENTO
            EXEC SP_TOTAL_NOTAS_FATURAMENTO @CD_LANCAMENTO

            --ATUALIZA VOLUMES
            EXEC SP_CALCULA_VOLUMES_NOTAS_FATURAMENTO @CD_LANCAMENTO, @CD_EMPRESA

            --ATUALIZA KARDEX
            EXEC SP_CALCULA_ESTOQUE 41, @CD_LANCAMENTO, @CD_ID, @DT_EMISSAO, @CD_FILIAL, @CD_MATERIAL

        END

0 个答案:

没有答案