Skip to content

Commit 972250d

Browse files
committed
[mssql] Use output instead of IDENT_CURRENT to retrieve newly added primary keys
It's safer, works with non-identity columns, and potentially allows us to optimise in future and bulk insert features instead of one by one
1 parent 72946c3 commit 972250d

File tree

1 file changed

+6
-14
lines changed

1 file changed

+6
-14
lines changed

src/providers/mssql/qgsmssqlprovider.cpp

+6-14
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,12 @@ bool QgsMssqlProvider::addFeatures( QgsFeatureList &flist, Flags flags )
944944
}
945945
}
946946

947-
statement += ") VALUES (" + values + ')';
947+
statement += QStringLiteral( ") " );
948+
if ( !( flags & QgsFeatureSink::FastInsert ) )
949+
{
950+
statement += QStringLiteral( " OUTPUT inserted." ) + mFidColName;
951+
}
952+
statement += QStringLiteral( " VALUES (" ) + values + ')';
948953

949954
// use prepared statement to prevent from sql injection
950955
if ( !query.prepare( statement ) )
@@ -1067,19 +1072,6 @@ bool QgsMssqlProvider::addFeatures( QgsFeatureList &flist, Flags flags )
10671072

10681073
if ( !( flags & QgsFeatureSink::FastInsert ) )
10691074
{
1070-
statement = QStringLiteral( "SELECT IDENT_CURRENT('%1.%2')" ).arg( mSchemaName, mTableName );
1071-
1072-
if ( !query.exec( statement ) )
1073-
{
1074-
QString msg = query.lastError().text();
1075-
QgsDebugMsg( msg );
1076-
if ( !mSkipFailures )
1077-
{
1078-
pushError( msg );
1079-
return false;
1080-
}
1081-
}
1082-
10831075
if ( !query.next() )
10841076
{
10851077
QString msg = query.lastError().text();

0 commit comments

Comments
 (0)