This is a simple routine I use to convert a SQL Table into a tSQL Insert statement. The script could easily be converted into a Stored Procedure if you needed it. The routine implicitely converts all numerics as string back to their original datatype; there is also the limitation of files 1000 characters or less (can be modified) and blobs - there's no accounting for those here.
The need for something like this comes up a lot; so here it is.
declare @Table varchar(255); Set @Table = 'tb_users'
declare @Catalog varchar(255); Set @Catalog = 'pubs'
declare @sql1 varchar(4000)
declare @sql2 varchar(4000)
DECLARE c_cols CURSOR
KEYSET
FOR select
column_name
from
INFORMATION_SCHEMA.COLUMNS
where
table_name = @Table
and table_catalog = @Catalog
DECLARE @col_name varchar(40)
OPEN c_cols
FETCH NEXT FROM c_cols INTO @col_name
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
if (@sql1 is null) set @sql1 = ''
if (@sql2 is null) set @sql2 = ''
set @sql1 = @sql1 + '' + @col_name + ','
set @sql2 = @sql2 +
' isnull('''''''' + convert(varchar(1000), ' +
@col_name + ') + '''''''', ''null'') + '','' +'
END
FETCH NEXT FROM c_cols INTO @col_name
END
CLOSE c_cols
DEALLOCATE c_cols
-- handle no columns
if (@sql1 is null)
begin
raiserror('Table %s does not exist in Catalog %s.',
16, 1, @Table, @Catalog)
return
end
set @sql1 = substring(@sql1, 1, len(@sql1) - 1) + ''
set @sql2 = substring(@sql2, 1, len(@sql2) - 10) +
''') as InsertStatement'
declare @sql varchar(8000)
set @sql = 'select ''insert into [' +
@Table + '] (' + @sql1 + ') values ('' + ' +
@sql2 + ' from [' + @Table + ']'
print @sql
execute(@sql)
GO