0

在使用 sqlsrv 扩展从 PHP中调用参数的 SQL Server 存储过程的文档中,它使用了一种奇怪的语法:

{call SubtractVacationHours( ?, ?)}

我期望的是:

EXEC SubtractVacationHours ?, ?;

在执行 T-SQL 存储过程的 SQL Server文档中,它只允许 EXEC | EXECUTE 作为命令字。所以我会认为查询会导致错误。

您当然可以sqlsrv_query使用指定参数(即用值替换问号)调用 EXEC SubtractVacationHours 的 SQL。

在对参数化查询进行进一步研究之后,似乎“调用”来自必须通过 ODBC 提供程序调用它

那么第二个 EXEC 语法真的有效吗?还是通过 sqlsrv 驱动程序调用参数化存储过程必须使用 ODBC CALL 语法?

4

1 回答 1

0

我已经用我的代码进行了测试,两种形式的语法都可以工作。根据 IIS blog post on Breaking API changes in February '08,建议使用 CALL 语法:

我们现在可以使用 canonical-call 语法调用该存储过程,推荐用于使用 SQL Server 2005 Driver for PHP 的存储过程:

$sql = '{? = CALL CreateProduct (?, ?, ?, ?)}';
于 2012-10-10T12:14:42.660 回答