【发布时间】:2017-12-14 18:48:39
【问题描述】:
我一直在寻找如何获得我正在处理的存储过程的结果的方法。
所以当这个 SP 被调用时,它会以一个自动递增的数字返回一系列数字。 ex. 0000002743
我不是创建 SP 的人,我是 SQL Server 的初学者,但是当我尝试“修改”它以至少了解它的构成时,我有这个:
ALTER PROCEDURE [dbo].[New_BatchCode] AS
DECLARE @x NUMERIC
UPDATE SysVars SET @x = BatchCode = BatchCode + 1
SELECT BatchCode = REPLACE(STR(@x,10),' ','0')
在 SQL Server 中,我只需运行EXEC [dbo].[New_BatchCode],就会显示结果。但是在 PHP 中,我无法让它工作。我尝试了以下方法:
1
$conn = $this->delphi_connect();
$batch_code_query = "EXEC [dbo].[New_BatchCode];";
$stmt3 = sqlsrv_query($conn,$batch_code_query);
if( $stmt3 === false )
{
echo "Error in executing statement 3.\n";
die( print_r( sqlsrv_errors(), true));
}
if ($stmt3) {
while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {
$ret[] = $row;
}
}
sqlsrv_free_stmt( $stmt3);
sqlsrv_close( $conn);
print_r($ret);
die();
2
$conn = $this->delphi_connect();
$batch_code_query = "{call [dbo].[New_BatchCode]}";
$stmt3 = sqlsrv_query($conn,$batch_code_query);
if( $stmt3 === false )
{
echo "Error in executing statement 3.\n";
die( print_r( sqlsrv_errors(), true));
}
if ($stmt3) {
while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {
$ret[] = $row;
}
}
sqlsrv_free_stmt( $stmt3);
sqlsrv_close( $conn);
print_r($ret);
die();
我的目标是以某种方式存储执行 SP 的结果并将其插入另一个查询。喜欢$batch_code = [result]。
我真的不知道该怎么办了。我会很感激你的帮助。谢谢!
【问题讨论】:
-
哪一行的结果?当您更新表时,它将更新所有行,因此您需要检查
INSERTED表并检测操作是INSERT还是UPDATE,这些值将存储在一个表中,因为它是多个值而不仅仅是一个. -
嗨@Sami!它只返回一个名为
BatchCode的列。我需要得到那个值。我会把上面的图片放上来。 -
BatchCode列的哪一行?没有WHERE,所以它会更新所有行,这意味着多个值。 -
@Sami 道歉。我不确定我是否正确,但由于存储过程只给了我一个值,所以没有地方。
-
SP给你一个随机值,因为没有WHERE或任何ORDER。我认为做你想做的事情的唯一方法是TRIGGER,你可以在其中返回所有插入的值。
标签: php sql-server stored-procedures