【问题标题】:Execution of a SQL Server stored procedure failed执行 SQL Server 存储过程失败
【发布时间】:2014-03-31 08:32:39
【问题描述】:

正如标题中提到的,我在使用 Symfony2 应用程序执行 SQL Server 存储过程时遇到了一些麻烦。

如果我直接在服务器上执行它,这一项工作。 但是当我想用它来坦克 Doctrine 时,我得到了一个 SQL 语句错误:

SQLSTATE[HY000]:一般错误:2812 一般 SQL Server 错误:检查来自 SQL Server [2812](严重性 16)[(null)]的消息

经过快速研究,似乎表明数据库中不存在存储过程。 但事实并非如此,因为我可以直接在服务器上执行它(结果正确)。

这正是 Symfony2 返回的原因:

DBALException: An exception occurred while executing ' EXEC SP_GET_PRICE
@p_id_variation = ?,
@p_quantity = ?,
@p_selling_price_type = ?,
@p_date = ?,
@p_id_clients = ?' with params [8933, 1, 2, "2014-03-31T10:11:01", 0]:

SQLSTATE[HY000]: General error: 2812 General SQL Server error: Check messages from the SQL Server [2812] (severity 16) [(null)]

经过多次研究,我不知道如何解决它......

谢谢! :)

编辑:我使用PDOLibBundle 连接到我的SQL Server

【问题讨论】:

  • 是否有任何您可以在同一个数据库中执行的存储过程?如果您使用 dbo.sp_get_price 调用 proc 会怎样?
  • 我刚刚测试过,是的,我可以执行另一个存储过程......所以问题似乎特定于这个。这已经是一个好消息了! ;) 我也用 dbo.sp_get_price 尝试了一个 exec,但结果是一样的。

标签: php sql-server symfony stored-procedures doctrine-orm


【解决方案1】:

您运行 SP 的用户是否与您从应用程序连接时使用的用户相同。如果没有,应用用户是否有运行SP的权限?

【讨论】:

  • 是的,用户是一样的。我实际上看看为什么我可以执行另一个过程而不会出错,因为这个过程没有语法错误:/
  • 尝试使用SP DBName.Schema.SPName的全名
  • 好的,我没有时间解释它:避免使用'sp_'前缀来存储过程。前缀是系统存储过程的特殊前缀。当您调用系统过程 (EXEC sp_*) 时,SQL Server 将在 master 数据库中搜索它。您可以使用完全限定名称命令 SQL Server 使用您的数据库。最好的解决方案是避免使用 sp_ 前缀。请改用 usp_ 。
  • 它实际上首先尝试在资源数据库中定位proc,而不是master。至少自从引入了资源数据库以来:) 如果您进行模式限定,即使如此。恕我直言,最好不要使用任何前缀,VerbObject 或反之亦然。
【解决方案2】:

错误 2018 是“找不到存储过程”。确保拼写正确。

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多