Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 58 additions & 3 deletions GenerateInsert.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -546,4 +601,4 @@ END ELSE BEGIN
END

END
GO
GO