質問があります。複数のテーブルに挿入する必要があります。ここでの問題は、他の 2 つのテーブルの最初のテーブルの ID が必要なことです。だから私は3つのテーブルを持っています。最初に挿入し、次にSCOPE_IDENTITY
を取得ID
し、他の 2 に入力する必要があります。問題は、SCOPE_IDENTITY
最後ID
の挿入の を取得することです。したがって、3 番目の挿入ID
では、1 番目ではなく 2 番目を取得します。
今ID
、選択で取得して変数に保存しようとしています。しかし、どういうわけかこれは機能しません。
私はphpでトランザクションを使用しています。これが私のコードです
sqlsrv_begin_transaction( $conn );
// Set up and execute the first query.
$tsql1 = "INSERT INTO CmContainer
(CmContainer.Serial
,CmContainer.Valid
,CmContainer.OnBlacklist
,CmContainer.BlacklistingRequested)
VALUES
('".$userdata['cmContainer']."'
,'1'
,'0'
,'0');";
$cursorType = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
$stmt1 = sqlsrv_query( $conn, $tsql1, null, $cursorType);
$tsql_ID = "SET @EmpID=SCOPE_IDENTITY();";
$cursorType = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
$stmt_ID = sqlsrv_query( $conn, $tsql_ID, null, $cursorType);
$tsql2 = "INSERT INTO CmContainerBelonging
(CmContainerBelonging.CmContainerID
,CmContainerBelonging.CompanyID)
VALUES
(@EmpID
,'".$_SESSION['userData']['companyID']."')";
$cursorType = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
$stmt2 = sqlsrv_query( $conn, $tsql2, null, $cursorType);
$tsql3 = "INSERT INTO CmContainerStatistic
(CmContainerStatistic.CmContainerID
,CmContainerStatistic.CreationTime)
VALUES
(@EmpID
,GETDATE())";
$cursorType = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
$stmt3 = sqlsrv_query( $conn, $tsql3, null, $cursorType);
if( $stmt1 && $stmt2 && $stmt3)
{
sqlsrv_commit( $conn );
$lang['successCmRegistration'];
}else {
sqlsrv_rollback( $conn );
error_log('Query error: '.print_r( sqlsrv_errors(), true));
$error .= 'Error on Update!';
}
これを実行すると、どういうわけかエラーが発生します。php でこれを行うことはできませんか、またはトランザクションで行われたときに SELECT Result を取得する際に問題がありますか? 私は本当にそれを機能させる方法がわかりません。
私が得た助けを前もって感謝します;)
編集:変数 @EmpID は、tsql_ID が実行された後に宣言されなくなり、次の挿入が新しいステートメントにあることがわかりました。どういうわけか、変数はここで失われます。
ステートメントを正しく組み合わせる方法はありますか?