【发布时间】:2015-10-18 21:38:01
【问题描述】:
我正在尝试通过 php 在 mssql db 中插入值。当 IDENTITY_INSERT 设置为 OFF 时,我收到一个错误 Cannot insert explicit value for identity column in。
我添加了查询行来设置 IDENTITY_INSERT 但仍然得到同样的错误。
我用来在 mssql db 中插入值的代码。
$serverName = "xxxx\SQLEXPRESS"; //serverName\instanceName
$connectionInfo = array( "Database"=>"xxxx", "UID"=>"xxx", "PWD"=>"xxxx" , "CharacterSet" => "UTF-8");
$con = sqlsrv_connect( $serverName, $connectionInfo);
if($con) {
echo "Connection established";
}
else{
echo "Connection could not be established.";
die( print_r( sqlsrv_errors(), true));
}
$query = "SET IDENTITY_INSERT dbo.xxx ON ";
$query = "INSERT INTO dbo.xxx([Id],[IdFirma], [VrstaDokumenta], [BrojDokumenta], [BrojDokumentaKroz],
[DatumDokumenta], [IdKupac], [VrstaCijene], [IdKorisnik], [NacinPlacanja], [DatumZadnjeAkcije], [Status], [StatusArhive],
[StatusIzmjene],
[StatusStampe], [VrstaFakture])
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$params = array($id,$IdFirma,$VrstaDokumenta,$BrojDokumenta, $BrojDokumentaKroz, $DatumDokumenta, $IdKupac, $VrstaCijene, $IdKorisnik,
$NacinPlacanja, $DatumZadnjeAkcije, $Status, $StatusArhive, $StatusIzmjene, $StatusStampe, $VrstaFakture);
/* Prepare and execute the statement. */
$stmt = sqlsrv_query( $con, $query, $params);
if( $stmt === false ) {
die( print_r( sqlsrv_errors(), true));
}
我得到的错误:
数组([0] => 数组([0] => 23000 [SQLSTATE] => 23000 [1] => 544 [代码] => 544 [2] => [微软][SQL Server Native Client 11.0][SQL 服务器]无法为表中的标识列插入显式值 'FKNarudzbeKupacaZaglavlje' 当 IDENTITY_INSERT 设置为 OFF 时。 [消息] => [Microsoft][SQL Server Native Client 11.0][SQL 服务器]无法为表中的标识列插入显式值 'FKNarudzbeKupacaZaglavlje' 当 IDENTITY_INSERT 设置为 OFF 时。 ))
有人可以告诉我如何解决这个问题或提供建议吗?
【问题讨论】:
-
您需要将身份插入设置为开启。希望此链接对您有所帮助。 msdn.microsoft.com/en-us/library/ms188059.aspx
-
我已经 $query = "SET IDENTITY_INSERT dbo.xxx ON ";
-
但是你不是用你的实际查询覆盖变量
$query吗?您实际上并没有运行 SET IDENTITY_INSERT 语句 - 您要么需要连接字符串,要么在中间执行查询(不要忘记之后再次关闭身份插入!) -
请务必再次将其关闭,否则您将面临很多挑战,因为您一次不能打开超过 1 张桌子。
标签: php sql-server