diff --git a/GenerateInsert.sql b/GenerateInsert.sql index 6d353d6..d57376e 100644 --- a/GenerateInsert.sql +++ b/GenerateInsert.sql @@ -149,9 +149,10 @@ SET @ValuesSql = N'VALUES ('; DECLARE @SelectSql nvarchar(max); SET @SelectSql = N'SELECT '; DECLARE @TableData table (TableRow nvarchar(max)); -DECLARE @Results table (TableRow nvarchar(max)); +DECLARE @Results table (Idx BIGINT IDENTITY(1,1), TableRow nvarchar(max)); DECLARE @TableRow nvarchar(max); DECLARE @RowNo int; +DECLARE @HasIdentityColumn bit; IF PARSENAME(@ObjectName,3) IS NOT NULL OR PARSENAME(@ObjectName,4) IS NOT NULL @@ -398,8 +399,14 @@ END IF @PopulateIdentityColumn = 1 BEGIN - INSERT INTO @Results - SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' ON' + IF EXISTS (select 1 from sys.columns where object_id = OBJECT_ID(@ObjectName) AND is_identity = 1) + SET @HasIdentityColumn = 1 + ELSE + SET @HasIdentityColumn = 0 + + IF @HasIdentityColumn = 1 + INSERT INTO @Results + SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' ON' END IF @GenerateSingleInsertPerRow = 1 @@ -472,8 +479,9 @@ END IF @PopulateIdentityColumn = 1 BEGIN - INSERT INTO @Results - SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' OFF' + IF @HasIdentityColumn = 1 + INSERT INTO @Results + SELECT N'SET IDENTITY_INSERT ' + COALESCE(@TargetObjectName,@ObjectName) + N' OFF' END IF @FormatCode = 1 @@ -502,6 +510,7 @@ BEGIN DECLARE ResultsCursor CURSOR LOCAL FAST_FORWARD FOR SELECT TableRow FROM @Results + ORDER BY Idx FOR READ ONLY ; OPEN ResultsCursor; @@ -542,7 +551,8 @@ BEGIN DEALLOCATE ResultsCursor; END ELSE BEGIN SELECT * - FROM @Results; + FROM @Results + ORDER BY Idx; END END