Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提交前在MS SQL中插入主键_Php_Sql_Sql Server - Fatal编程技术网

Php 提交前在MS SQL中插入主键

Php 提交前在MS SQL中插入主键,php,sql,sql-server,Php,Sql,Sql Server,在PHP中,我试图将多行插入到两个单独的表中。因为这些都需要成功,我从以下几点开始: mssql_query("BEGIN TRAN"); 然后我在主表中运行insert: $insert_Proposal = 'INSERT INTO PROPOSALS( '; $insert_Proposal .= 'ApprovedByDev, '; $insert_Proposal .= 'EstFundingEndFiscalYear, '; $insert_Proposal .= 'EstFun

在PHP中,我试图将多行插入到两个单独的表中。因为这些都需要成功,我从以下几点开始:

mssql_query("BEGIN TRAN");
然后我在主表中运行insert:

$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,以便在发出提交之前,我可以使用它将记录插入到另一个表中

我发现了一些建议,比如:

output inserted.pk
$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 .= ')';


但是,如果您没有提交初始事务,这些似乎就不起作用。提前感谢您的帮助。

您可能需要使用,因为它返回当前会话和作用域中最后插入的标识。作用域可以是批处理、存储过程、函数或触发器

您可能想要使用,因为它返回当前会话和范围内最后插入的标识。作用域可以是批处理、存储过程、函数或触发器

这两种解决方案,使用OUTPUT子句或使用SCOPE_标识,即使您启动了事务,也应该可以正常工作。但我看不到它们中的任何一个在你发布的代码中实际使用。必须将OUTPUT子句附加到您编写的INSERT,例如:

output inserted.pk
$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\u建议。

这两种解决方案,使用OUTPUT子句或使用SCOPE\u标识,即使您启动了事务,也应该可以正常工作。但我看不到它们中的任何一个在你发布的代码中实际使用。必须将OUTPUT子句附加到您编写的INSERT,例如:

output inserted.pk
$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_建议作为返回结果的语句执行。

我认为问题在于使用自动编号;您必须在表中使用标识。看,我只是这方面的web程序员,没有DBA特权,所以我可以提出建议,但我必须接受他们提供的结构。也就是说,当我说自动编号时,我的意思是它被定义为一个标识增量为1的标识,我认为问题在于使用自动编号;您必须在表中使用标识。看,我只是这方面的web程序员,没有DBA特权,所以我可以提出建议,但我必须接受他们提供的结构。也就是说,当我说“自动编号”时,我的意思是它被定义为标识增量为1的标识。我最初发布了一个带有SELECT IDENT_CURRENT的答案,因为我认为范围标识直到提交之后才生成值。。。但是研究发现,无论是否回滚,插入开始时都会生成新的ID。所以,删除了我的答案,投了你的赞成票。谢谢雷姆斯,我把输出放错地方了。它确实保留了主键,即使我没有提交查询。我最初发布了一个带有SELECT IDENT_CURRENT的答案,因为我认为SCOPE_标识直到提交之后才生成值。。。但是研究发现,无论是否回滚,插入开始时都会生成新的ID。所以,删除了我的答案,投了你的赞成票。谢谢雷姆斯,我把输出放错地方了。它确实保留了主键,即使我没有提交查询。