Fazendo Select para Insert em Tabelas do Banco de Dados SQL

5 de agosto de 2011   |   by administrador

Em algumas ocasiões quando precisamos gerar scripts de Insert no banco de dados, encontramos algumas dificuldades em fazer isto.

o código abaixo mostra como gerar insert de tabelas, apartir do nome da tabela.

segue:

DECLARE @tableName varchar(100) ='Pessoa' -- aqui você informa o nome da tabela

DECLARE cursCol CURSOR FAST_FORWARD FOR

SELECT column_name,data_type FROM information_schema.columns

WHERE table_name = @tableName

OPEN cursCol

DECLARE @string nvarchar(3000)

DECLARE @stringData nvarchar(3000)

DECLARE @dataType nvarchar(1000)

SET @string='INSERT '+@tableName+'('

SET @stringData=''

DECLARE @colName nvarchar(50)

FETCH NEXT FROM cursCol INTO @colName,@dataType

IF @@fetch_status<>0

begin

print 'Tabela '+@tableName+' não encontrada, processo parado.'

close curscol

deallocate curscol

return

END

WHILE @@FETCH_STATUS=0

BEGIN

IF @dataType in ('varchar','char','nchar','nvarchar')

BEGIN

SET @stringData=@stringData+'''''''''+

isnull('+@colName+','''')+'''''',''+'

END

ELSE

if @dataType in ('text','ntext')

BEGIN

SET @stringData=@stringData+'''''''''+

isnull(cast('+@colName+' as varchar(2000)),'''')+'''''',''+'

END

ELSE

IF @dataType = 'money'

BEGIN

SET @stringData=@stringData+'''convert(money,''''''+

isnull(cast('+@colName+' as varchar(200)),''0.0000'')+''''''),''+'

END

ELSE

IF @dataType='datetime'

BEGIN

SET @stringData=@stringData+'''convert(datetime,''''''+

isnull(cast('+@colName+' as varchar(200)),''0'')+''''''),''+'

END

ELSE

IF @dataType='image'

BEGIN

SET @stringData=@stringData+'''''''''+

isnull(cast(convert(varbinary,'+@colName+')

as varchar(6)),''0'')+'''''',''+'

END

ELSE

BEGIN

SET @stringData=@stringData+'''''''''+

isnull(cast('+@colName+' as varchar(200)),''0'')+'''''',''+'

END

SET @string=@string+@colName+','

FETCH NEXT FROM cursCol INTO @colName,@dataType

END

DECLARE @Query nvarchar(4000)

SET @query ='SELECT '''+substring(@string,0,len(@string)) + ')

VALUES(''+ ' + substring(@stringData,0,len(@stringData)-2)+'''+'')''

FROM '+@tableName

exec sp_executesql @query

CLOSE cursCol

DEALLOCATE cursCol

Após isso, execute a string SQL, e verá o resultado.