Skip to content

Commit 69f6ea5

Browse files
roya0045nyalldawson
authored andcommitted
[mssql] Fix inserting features into tables with an after insert trigger attached
Fixes #20592
1 parent efd54f8 commit 69f6ea5

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/providers/mssql/qgsmssqlprovider.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,15 @@ bool QgsMssqlProvider::addFeatures( QgsFeatureList &flist, Flags flags )
872872

873873
QString statement;
874874
QString values;
875-
statement = QStringLiteral( "INSERT INTO [%1].[%2] (" ).arg( mSchemaName, mTableName );
875+
if ( !( flags & QgsFeatureSink::FastInsert ) )
876+
{
877+
statement += QStringLiteral( "DECLARE @px TABLE (id INT); " );
878+
statement += QStringLiteral( "INSERT INTO [%1].[%2] (" ).arg( mSchemaName, mTableName );
879+
}
880+
else
881+
{
882+
statement += QStringLiteral( "INSERT INTO [%1].[%2] (" ).arg( mSchemaName, mTableName );
883+
}
876884

877885
bool first = true;
878886
QSqlQuery query = createQuery();
@@ -947,10 +955,14 @@ bool QgsMssqlProvider::addFeatures( QgsFeatureList &flist, Flags flags )
947955
statement += QStringLiteral( ") " );
948956
if ( !( flags & QgsFeatureSink::FastInsert ) )
949957
{
950-
statement += QStringLiteral( " OUTPUT inserted." ) + mFidColName;
958+
statement += QStringLiteral( " OUTPUT inserted." ) + mFidColName + QStringLiteral( " INTO @px " );
951959
}
952960
statement += QStringLiteral( " VALUES (" ) + values + ')';
953961

962+
if ( !( flags & QgsFeatureSink::FastInsert ) )
963+
{
964+
statement += QStringLiteral( "; SELECT id FROM @px;" );
965+
}
954966
// use prepared statement to prevent from sql injection
955967
if ( !query.prepare( statement ) )
956968
{

0 commit comments

Comments
 (0)