Wednesday, August 18, 2010

Store Procedure for genrate Insert Script of Table Data

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROC [sp_DataAsInsCommand] (
@TableList varchar (8000),
@where varchar(8000) = ''
)
AS
SET NOCOUNT ON
DECLARE @position int, @exec_str varchar (2000), @TableName varchar (50)
DECLARE @name varchar(128), @xtype int, @status tinyint, @IsIdentity tinyint
SELECT @TableList = @TableList + ','
SELECT @IsIdentity = 0
SELECT @position = PATINDEX('%,%', @TableList)
WHILE (@position <> 0)
BEGIN
SELECT @TableName = SUBSTRING(@TableList, 1, @position - 1)
SELECT @TableList = STUFF(@TableList, 1, PATINDEX('%,%', @TableList),'')
SELECT @position = PATINDEX('%,%', @TableList)
SELECT @exec_str = 'DECLARE fetch_cursor CURSOR FOR ' + 'SELECT a.name, a.xtype, a.status FROM syscolumns a, sysobjects b WHERE a.id = b.id and b.name = ''' + @TableName + ''''
EXEC (@exec_str)
OPEN fetch_cursor
FETCH fetch_cursor INTO @name, @xtype, @status
IF (@status & 0x80) <> 0
BEGIN
SELECT @IsIdentity = 1
SELECT 'SET IDENTITY_INSERT ' + @TableName + ' ON'
SELECT 'GO'
END
SELECT @exec_str = 'SELECT ''INSERT INTO ' + @TableName + ' VALUES ('' + '
--Select ' -- The table name is: ' + @TableName
--text or ntext
IF (@xtype = 35) OR (@xtype = 99)
begin
SELECT @exec_str = @exec_str + '''"None yet"'''
print @exec_str
end
ELSE
--image
IF (@xtype = 34)
begin
SELECT @exec_str = @exec_str + '"' + '0xFFFFFFFF' + '"'
end
ELSE
--smalldatetime or datetime
IF (@xtype = 58) OR (@xtype = 61)
begin
SELECT @exec_str = @exec_str + 'Coalesce(' + ' + ''"'' + ' + ' + CONVERT(varchar,' + @name + ',113)' + ' + ''"''' + ')'
end
ELSE
--varchar or char or nvarchar or nchar
IF (@xtype = 167) OR (@xtype = 175) OR (@xtype = 231) OR (@xtype = 239)
SELECT @exec_str = @exec_str + 'Coalesce(' + '''"'' + ' + @name + ' + ''"''' + ',''null'')'
ELSE
--uniqueidentifier
IF (@xtype = 36)
SELECT @exec_str = @exec_str + ' + Coalesce(''"'' + ' + ' + CONVERT(varchar(255),' + @name + ')' + ' + ''"''' + ',''null'')'
ELSE
--binary or varbinary
IF (@xtype = 173) OR (@xtype = 165)
begin
SELECT @exec_str = @exec_str + '"' + '0x0' + '"'
print @exec_str
end
ELSE
SELECT @exec_str = @exec_str + 'Coalesce(CONVERT(varchar,' + @name + '), ''null'')'
WHILE @@FETCH_STATUS <> -1
BEGIN
FETCH fetch_cursor INTO @name, @xtype, @status
IF (@@FETCH_STATUS = -1) BREAK
IF (@status & 0x80) <> 0
BEGIN
SELECT @IsIdentity = 1
SELECT 'SET IDENTITY_INSERT ' + @TableName + ' ON'
SELECT 'GO'
END
--text or ntext
IF (@xtype = 35) OR (@xtype = 99)
SELECT @exec_str = @exec_str + ' + '',''' + ' + ''"None yet"'''
ELSE
--image
IF (@xtype = 34)
begin
SELECT @exec_str = @exec_str + ' + '','' + ' + '"' + '0xFFFFFFFF' + '"'
end
ELSE
--smalldatetime or datetime
IF (@xtype = 58) OR (@xtype = 61)
begin
SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce(''"'' + ' + ' + CONVERT(varchar,' + @name + ',113)' + ' + ''"''' + ',''null'')'
end
ELSE
--varchar or char or nvarchar or nchar
IF (@xtype = 167) OR (@xtype = 175) OR (@xtype = 231) OR (@xtype = 239)
begin
SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce(''"'' + ' + @name + ' + ''"''' + ',''null'')'
end
ELSE
--uniqueidentifier
IF (@xtype = 36)
begin
SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce(''"'' + ' + ' + CONVERT(varchar(255),' + @name + ')' + ' + ''''''' + ',''null'')'
end
ELSE
--binary or varbinary
IF (@xtype = 173) OR (@xtype = 165)
begin
SELECT @exec_str = @exec_str + ' + '','' + ' + '"' + '0x0' + '"'
end
ELSE
begin
SELECT @exec_str = @exec_str + ' + '',''' + ' + Coalesce(CONVERT(varchar,' + @name + '), ''null'')'
end
END
CLOSE fetch_cursor
DEALLOCATE fetch_cursor
SELECT @exec_str = @exec_str + '+ '')'' FROM ' + @TableName
if ltrim(rtrim(@where)) <> '' set @exec_str = @exec_str + ' where ' + @where
set @exec_str = @exec_str + ' ORDER BY 1'
set @exec_str = replace(@exec_str, '"', '''''')
print @exec_str
EXEC(@exec_str)
-- print (@exec_str)
--SELECT 'GO'
IF @IsIdentity = 1
BEGIN
SELECT @IsIdentity = 0
SELECT 'SET IDENTITY_INSERT ' + @TableName + ' OFF'
--SELECT 'GO'
END
END

No comments:

Post a Comment