【发布时间】:2013-07-12 09:16:55
【问题描述】:
所以我确信存储过程可以正常工作,我已经在 SQL Server Management Studio 中对其进行了很好的测试,并且它可以在其他服务实例中运行。用于运行此 SP 的查询如下;
exec sp_getAgentCommissionDetails_v3 201000023762230, 5
所以它在 SSMS 和旧的 MSSQL 驱动程序下运行良好。但是我像这样使用 SQLSRV 运行查询;
function mssql_query($string, $linkID = null, $batch = 0) {
if (!$linkID) {
global $dbhandle;
$linkID = $dbhandle;
}
// SQLSRV_CURSOR_KEYSET ensures mssql_num_rows() works in most cases. Default scrollablility does not support this.
return sqlsrv_query($linkID, $string, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
}
该函数被命名为 mssql_query,因为我们正在将旧系统从 MSSQL 更新到 SQLSRV,但我们正在使用一个极其混乱的旧系统。因此,我们没有尝试重构它,而是用使用 SQLSRV 的函数覆盖 MSSQL_query 函数(禁用了 mssql 扩展)。 $dbhandle 是我们的 SQLSRV 连接资源。其他查询使用此方法运行得很好。
所以我的问题 - 运行存储过程的查询是否有任何理由不会在此 SQLSRV 函数下运行?
关于我的故障排除的几个注意事项;
我知道 SQLSRV 和 PDO 具有运行存储过程的特定方法。由于大量代码库在各个地方使用上述方法,并且我们没有工时来重构每个页面,因此使用它不是一种选择。
我调出 SQLSRV_errors() 并返回 'Executing SQL directly;没有光标'。经过一番研究,这似乎是驱动程序中的一个错误,它返回此通用错误消息而不是更具体的有用消息,因此它可能意味着很多事情。 存储过程中不涉及游标或循环。
【问题讨论】:
-
在
$string的开头添加SET CONCAT_NULL_YIELDS_NULL ON; SET ANSI_WARNINGS ON; SET ANSI_PADDING ON;可能会有所帮助。
标签: php sql-server stored-procedures sqlsrv