レコードのリストをインポートするストアド プロシージャを作成しました。このストアド プロシージャは、一時テーブルに INSERT を実行し、契約番号が一致するかどうかに基づいて MERGE を実行します。TARGET によって一致しない場合は実際のテーブルに INSERT し、SOURCE によって一致しない場合は実際のテーブルから DELETE します。
これは問題なく動作します。私が取り組んでいる問題は、SQL SERVER メッセージをエコーするようにしようとしている PHP にあります。
(2384 row(s) affected)
(2 row(s) affected)
「(2384 行が影響を受けました)」の最初のメッセージは sql_srv_rows_affected で表示されますが、2 番目の「(2 行が影響を受けました)」は表示されません。最初の結果は一時テーブルへのインポートで、2 番目の結果は MERGE ステートメントの影響を受けた行の量です。
影響を受ける行をエコーアウトするコードは次のとおりです。
$rows_affected = sqlsrv_rows_affected($Result);
if( $rows_affected === false) {
die( print_r( sqlsrv_errors(), true));
}
elseif( $rows_affected == -1) {
echo "No information available.<br />";
}
else {
echo $rows_affected." rows were updated.<br />";
}
探しているものを達成するために while ステートメントを実行できますか?
前もって感謝します!
編集:これが機能したコードです:
$rows_affected = sqlsrv_rows_affected( $PPListImportResult);
$next_result = sqlsrv_next_result($PPListImportResult);
if( $rows_affected === false) {
die( print_r( sqlsrv_errors(), true));
}
elseif( $rows_affected == -1) {
echo "No information available.<br />";
}
else {
echo $rows_affected." rows were updated.<br />";
echo $next_result." rows were updated.<br />";
}
結果が 2 つ以上ある場合は、代わりに $next_result 変数を while ステートメントに変更できます。