From 5305e9df59e6228bce87f508f36bef2b3883e190 Mon Sep 17 00:00:00 2001 From: Jeffrey Lai Date: Tue, 30 Mar 2021 09:40:33 +0200 Subject: [PATCH 1/2] Adding Create Table Statement --- GenerateInsert.sql | 61 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/GenerateInsert.sql b/GenerateInsert.sql index 6d353d6..b115dfc 100644 --- a/GenerateInsert.sql +++ b/GenerateInsert.sql @@ -27,16 +27,16 @@ CREATE PROCEDURE dbo.GenerateInsert , @GenerateStatementTerminator bit = 1 , @ShowWarnings bit = 1 , @Debug bit = 0 +, @GenerateTableStatement bit = 1 ) AS /******************************************************************************* -Procedure: GenerateInsert (Build 6) +Procedure: GenerateInsert (Build 7) Decription: Generates INSERT statement(s) for data in a table. Purpose: To regenerate data at another location. To script data populated in automated way. To script setup data populated in automated/manual way. Project page: http://github.com/drumsta/sql-generate-insert - Arguments: @ObjectName nvarchar(261) Format: [schema_name.]object_name @@ -482,6 +482,61 @@ BEGIN SELECT N''; -- An empty line at the end END +IF @GenerateTableStatement =1 +BEGIN + SET NOCOUNT ON; + + DECLARE @InputSQL AS NVARCHAR(4000) + + SELECT @InputSQL = 'SELECT * FROM ' + @ObjectName + + SELECT @TargetObjectName = ISnull(@TargetObjectName,@ObjectName) + + DECLARE @SQL AS NVARCHAR(4000) + DECLARE @name NVARCHAR(128) + DECLARE @is_nullable BIT + DECLARE @system_type_name NVARCHAR(128) + DECLARE @collation_name NVARCHAR(128) + DECLARE @NewLine NVARCHAR(2) = CHAR(13) + CHAR(10) -- CRLF + + DECLARE CUR_Table CURSOR LOCAL FAST_FORWARD + FOR + SELECT name , + is_nullable , + system_type_name , + collation_name + FROM sys.dm_exec_describe_first_result_set(@InputSQL, NULL, NULL) + WHERE is_hidden = 0 + ORDER BY column_ordinal ASC + + OPEN CUR_Table + + FETCH NEXT FROM CUR_Table INTO @name, @is_nullable, @system_type_name, + @collation_name + + SET @SQL = 'CREATE TABLE [' + ISNULL(@TargetObjectName, 'TableName') + '] (' + + @NewLine + + WHILE @@FETCH_STATUS = 0 + BEGIN + SET @SQL += @NewLine + '[' + @name + ']' + ' ' + @system_type_name + + CASE WHEN @collation_name IS NOT NULL + THEN ' COLLATE ' + @collation_name + ' ' + ELSE '' + END + CASE WHEN @is_nullable = 0 THEN ' NOT NULL ' + ELSE '' + END + ',' + FETCH NEXT FROM CUR_Table INTO @name, @is_nullable, @system_type_name, + @collation_name + END + + SET @SQL = LEFT(@SQL, LEN(@SQL) - 1) + @NewLine + ')' + + CLOSE CUR_Table + DEALLOCATE CUR_Table + + PRINT @sql +END IF @PrintGeneratedCode = 1 BEGIN DECLARE @LongRows bigint; @@ -546,4 +601,4 @@ END ELSE BEGIN END END -GO +GO \ No newline at end of file From e3e70d2524f91438f2ca491b4500a9287fe8dad4 Mon Sep 17 00:00:00 2001 From: Jeffrey Lai Date: Tue, 30 Mar 2021 09:41:59 +0200 Subject: [PATCH 2/2] Changing default for generateTableStatement --- GenerateInsert.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenerateInsert.sql b/GenerateInsert.sql index b115dfc..e433607 100644 --- a/GenerateInsert.sql +++ b/GenerateInsert.sql @@ -27,7 +27,7 @@ CREATE PROCEDURE dbo.GenerateInsert , @GenerateStatementTerminator bit = 1 , @ShowWarnings bit = 1 , @Debug bit = 0 -, @GenerateTableStatement bit = 1 +, @GenerateTableStatement bit = 0 ) AS /*******************************************************************************