【问题标题】:How to debug error 102 severity 15 state 1如何调试错误 102 严重性 15 状态 1
【发布时间】:2013-12-01 07:45:05
【问题描述】:

如何找到解决方案来修复当我从 php 运行时得到 Error 102 severity 15 state 1 的 SP PHP:

$stmt = mssql_init('DBO.TEST_sp_SET_Claim Status');
mssql_bind($stmt, '@ClaimID', $claimID, SQLINT4);
mssql_bind($stmt, '@Status', $status, SQLINT4);
mssql_bind($stmt, '@UserID', $userID, SQLINT4);
$result = mssql_execute($stmt);

SP:

  @ClaimID INT,
  @Status INT,
  @UserID INT
AS
BEGIN
  SET NOCOUNT ON;
  --Start : Update claim Status.
  UPDATE    DBO.Payment
      SET StatusID = @Status, 
        ClosedBy = CASE 
                WHEN @Status = 2 THEN @UserID
                WHEN @Status = 13 THEN @UserID
                WHEN @Status = 14 THEN @UserID
                WHEN @Status = 16 THEN @UserID
                ELSE NULL 
              END ,
        UserID = @UserID, 
        DateClosed = CASE 
                WHEN @Status = 2 THEN GETDATE()
                WHEN @Status = 13 THEN GETDATE()
                WHEN @Status = 14 THEN GETDATE()
                WHEN @Status = 16 THEN GETDATE()
                ELSE NULL 
              END
  FROM  DBO.ClaimHeader P_CH
      INNER JOIN DBO.Payment P_PI ON P_CH.ClientClaimID = P_PI.ClientClaimID
  WHERE P_CH.ClientClaimID  = @ClaimID              
  --End

END

在我得到的 SQL Server Profiler 中

Exception           Error 102 severity 15 state 1
SQL:BatchStarting   EXEC DBO.TEST_sp_SET_Claim Status @ClaimID=20,@Status=4,@UserID=22
SQL:BatchCompleted  EXEC DBO.TEST_sp_SET_Claim Status @ClaimID=20,@Status=4,@UserID=22       

当我直接在 sql 中运行时,它工作正常

DECLARE @return_value int

EXEC    @return_value = [dbo].[TEST_sp_SET_Claim Status]
    @ClaimID = 20,
    @Status = 4,
    @UserID = 22

SELECT  'Return Value' = @return_value

当我直接从 php 运行查询时,它也可以正常工作

     $query="
  DECLARE @Status INT, @UserID INT, @ClaimID INT
  SET @Status=$status
  SET @UserID = $userID
  SET @ClaimID = $claimID
  UPDATE    DBO.Payment
      SET StatusID = @Status, 
        ClosedBy = CASE 
                WHEN @Status = 2 THEN @UserID
                WHEN @Status = 13 THEN @UserID
                WHEN @Status = 14 THEN @UserID
                WHEN @Status = 16 THEN @UserID
                ELSE NULL 
              END ,
        UserID = @UserID, 
        DateClosed = CASE 
                WHEN @Status = 2 THEN GETDATE()
                WHEN @Status = 13 THEN GETDATE()
                WHEN @Status = 14 THEN GETDATE()
                WHEN @Status = 16 THEN GETDATE()
                ELSE NULL 
              END
  FROM  DBO.ClaimHeader P_CH
      INNER JOIN DBO.Payment P_PI ON P_CH.ClientClaimID = P_PI.ClientClaimID
  WHERE P_CH.ClientClaimID  = @ClaimID  
       ";
 $result=mssql_query($query);

我唯一能想到的是名称TEST_sp_SET_Claim Status中的空格,但是这个Sp也被其他应用程序使用并且工作正常,我无法更改...可能是另一回事吗?

【问题讨论】:

    标签: php sql-server sql-server-2008


    【解决方案1】:

    问题在于 SP 名称 DBO.TEST_sp_SET_Claim Status,在 Status 之前有一个空格。 我修复了刚刚将 SP 名称括在方括号中的问题 []

    $stmt = mssql_init('[DBO].[TEST_sp_SET_Claim Status]');
    

    建议使用方括号来避免此类问题。

    如果列名或 Sp 名包含空格或与保留字冲突

    List of Reserved Keywords in SQL-SERVER

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-07
      • 2019-10-29
      • 2019-04-26
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      相关资源
      最近更新 更多