【问题标题】:PHP Mssql multi query in a store procedure存储过程中的 PHP Mssql 多查询
【发布时间】:2014-09-16 22:22:49
【问题描述】:

我有一个执行存储过程的 PHP 脚本。到目前为止,一切都很好。现在我有一个存储过程,它在存储过程中执行两个查询:

EXEC ('Delete From [DB].dbo.[Table]')
EXEC ('INSERT INTO [DB].dbo.[Table] ([Col])VALUES(1)')

如果我用php调用SP,它只会删除Table的内容,不会插入第一行。 (似乎只有第一个 Exec 会被执行) 我在 PHP 中调用 SP 如下:

$stmt = sqlsrv_query($connection, "EXEC my_sp" );
...
while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
...
}

目前回报对我来说并不重要。我只是想知道为什么只执行第一个查询。如果直接在数据库中调用 SP,查询将按预期执行。 没有错误消息或类似的东西。 有人知道我如何只用一个 php 调用就可以执行两个“execs”和一个 SP 吗?

感谢您的帮助! V

【问题讨论】:

    标签: php sql-server stored-procedures multi-query


    【解决方案1】:

    我认为您不需要在 SP 中编写 EXEC ('Delete From [DB].dbo.[Table]')。忽略 EXEC()。就像 Delete From [DB].dbo.[Table] 这样写。

    【讨论】:

    • 嘿,谢谢你的回答。是的,在这种情况下它是可能的。我使用 exec 将表和列定义为参数。所以在某些情况下我需要两个 EXEC。 EXEC 有查询字符串长度的限制,所以我需要多个。是否有可能通过一个 PHP 调用在存储过程中调用两个 EXEC?
    • 我认为即使您想将表名作为变量传递,您也不需要 EXEC。直接写查询。
    • 我不知道这是怎么工作的......我有一个存储过程,例如:CREATE PROCEDURE [bla] @table_name nvarchar(50) AS DELETE * FROM [@table_name] 这将只运行,如果我把这个删除查询放在一个文本中,连接变量并执行查询......我可以用 EXEC 执行的这个字符串是有限的..这就是为什么我使用多个 EXEC,但有描述的问题.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多