diff --git a/GenerateInsert.sql b/GenerateInsert.sql index 6d353d6..e433607 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 = 0 ) 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