在PHP中,我试图将多行插入两个单独的表中。因为这些都需要成功,我开始:
mssql_query("BEGIN TRAN");
然后我将插入主表:
$insert_Proposal = 'INSERT INTO PROPOSALS( ';
$insert_Proposal .= 'ApprovedByDev, ';
$insert_Proposal .= 'EstFundingEndFiscalYear, ';
$insert_Proposal .= 'EstFundingStartDate, ';
$insert_Proposal .= 'ProjectDesc, ';
$insert_Proposal .= 'ProjectType, ';
$insert_Proposal .= 'ProposalComments ';
$insert_Proposal .= ') VALUES ( ';
$insert_Proposal .= sqlSafeVars($_POST['ApprovedByDev'], "varchar") .', ';
$insert_Proposal .= sqlSafeVars($_POST['EstFundingEndFiscalYear'], "bigint") .', ';
$insert_Proposal .= sqlSafeVars($_POST['EstFundingStartDate'], "varchar") .', ';
$insert_Proposal .= sqlSafeVars($_POST['ProjectDesc'], "varchar") .', ';
$insert_Proposal .= sqlSafeVars($_POST['ProjectType'], "bigint") .', ';
$insert_Proposal .= sqlSafeVars($_POST['ProposalComments'], "varchar") .' ';
$insert_Proposal .= ')';
我需要的是获取将由此创建的自动编号的ProposalID,以便在我发出 COMMIT
之前,我可以使用它将记录插入到另一个表中我找到了使用类似内容的建议:
output inserted.pk
或
INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;
但是如果您没有提交初始交易,这些似乎不起作用。提前感谢您的帮助。
答案 0 :(得分:2)
您可能希望使用SCOPE_IDENTITY,因为它返回当前会话和范围内的最后一个插入标识。范围可以是批处理,存储过程,函数或触发器。
答案 1 :(得分:2)
使用OUTPUT子句或使用SCOPE_IDENTITY的两种解决方案即使启动了事务也应该可以正常工作。但是我没有看到它们在你发布的代码中实际使用过。 OUTPUT子句必须附加到您编写的INSERT上,如:
$insert_Proposal = 'INSERT INTO PROPOSALS( ';
$insert_Proposal .= 'ApprovedByDev, ';
...
$insert_Proposal .= ') ';
$insert_Proposal .= 'OUTPUT INSERTED.id '
$insert_Proposal .= ' VALUES ( ';
$insert_Proposal .= sqlSafeVars($_POST['ApprovedByDev'], "varchar") .', ';
...
$insert_Proposal .= ')';
你需要执行$ insert_Proposal作为返回结果的声明。