使用临时表时没有存储过程的结果[mssql]

时间:2017-11-22 13:54:04

标签: php sql-server stored-procedures

我在mssql中有一个存储过程。 SP直接执行时工作正常。当我用PHP(PHP版本5.5.13,ZF 1.12.20)调用它时,我没有得到任何结果

  General SQL Server error: Check messages from the SQL Server [4004] (severity 16)

当我用临时表移除部件时,它工作正常,但这不是我的选择,因为我不拥有SP。我将SP缩短为可读。它包含4个不同SP之间的大约20个临时表,但每个临时表都会出现问题。

     $this->_connection = sqlsrv_connect($serverName, $connectionInfo);
     ...
     $this->_stmt = sqlsrv_prepare( $this->connection, 'EXECUTE spBtrgEPM9_test 104215, 37');
      ...
      $stmt->execute($aBindableSpParams);

            $aPlainResult = $stmt->fetchAll();

            $aResult = array();

            foreach ($aPlainResult AS $aRow) {
                $sRowClass = $this->getRowClass();

                if (!class_exists($sRowClass)) {
                    Zend_Loader::loadClass($sRowClass);
                }

                $aResult[] = new $sRowClass(array("data" => $aRow));
            }

            // Cache result
            self::$_aCache[$sSpSpec][$sMd5Hash] = $aResult;
        }

    return self::$_aCache[$sSpSpec][$sMd5Hash];

SP:

   ALTER proc [dbo].[spBtrgEPM9_test]
   @arbId int
  ,@voId int
  as begin

  set nocount on
  set dateformat dmy

  SET ANSI_WARNINGS ON
  SET ANSI_PADDING ON
  SET ANSI_NULLS ON
  SET QUOTED_IDENTIFIER ON
  SET ANSI_NULL_DFLT_ON ON
  SET CONCAT_NULL_YIELDS_NULL ON


   declare @xml_data xml


  Create table #fnDataTable
  (
   LastName varchar(250)
  ,FirstName varchar(250) 
  ,DateOfBirth date
  ,Gender int
  ,CustomerId int
  ,CustomerName varchar(250)
  ,CustomerNumber varchar(250)
  ,ContributionId int
  )

  insert into #fnDataTable(       
  LastName 
  ,FirstName 
  ,DateOfBirth 
  ,Gender 
  ,CustomerId 
  ,CustomerName 
  ,CustomerNumber 
  ,ContributionId 
  )
  exec CalcDB.dbo.GetSalesData @arbId,@voId


  declare @xmlValidierung varchar(max)

  Set @xmlValidierung = '<?xml version="1.0"?>'+ 
  convert(varchar(max),
   (select 
      (SELECT top 1 y.* FROM #fnDataTable y   FOR XML PATH('persondata'),       TYPE)

  FOR XML PATH(''), ROOT('rentenrechner')) 

  )



  select @xml_data= CONVERT(xml, @xmlValidierung)

    select   @xml_data as XML_DATA

我无法更改SP。如果快速溶解,我可以添加一些线。

解决方案第1部分: 我有两个问题。我用临时表解决了这个问题。 我必须将所有字段显式声明为null。

    Create table #fnDataTable
      (
       LastName varchar(250) null
      ,FirstName varchar(250)  null
      ,DateOfBirth date null
      ,Gender int null
      ,CustomerId int null
      ,CustomerName varchar(250) null
      ,CustomerNumber varchar(250) null
      ,ContributionId int null
      )

我仍有问题,我无法处理数据类型XML

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,经过大量搜索,我发现在程序的开头添加“ SET NOCOUNT ON”并在最后添加“ SET NOCOUNT OFF”可以解决我的问题。