读书人

怎么将一个包含数据的表生成一个SQL语

发布时间: 2012-03-22 17:43:57 作者: rapoo

如何将一个包含数据的表生成一个SQL语句~~
假设有一个表A,里面包含了大量数据,我想把这里面的所有内容包含表结构和数据生成一个SQL语句,可以在查询分析器中执行一下,再生成同样的一个表,不知要如何作?~~

[解决办法]
我有一个办法,你可以用企业管理器的导出数据功能把数据导出到txt文件

其中行用 "; ",列用 ", "

导出后在语句前加入Create Table 语句
加上Insert TableName Select

然后替换 "; "为 " union all Select "

去掉最后一个 " union all Select "

这时文本文件中的数据就可以直接在查询分析器中运行了,注意identity列,先去掉这个属性
最后再加条alter语句加上,这样方便点
[解决办法]
/*
调用方法,如有表 table1
proc_insert 'table1 '
可以生成 insert 语句
*/
create proc proc_insert (@tablename varchar(256))
as
begin
set nocount on
declare @sqlstr varchar(4000)
declare @sqlstr1 varchar(4000)
declare @sqlstr2 varchar(4000)
select @sqlstr= 'select ' 'insert '+@tablename
select @sqlstr1= ' '
select @sqlstr2= ' ( '
select @sqlstr1= ' values ( ' '+ '
select @sqlstr1=@sqlstr1+col+ '+ ' ', ' '+ ' ,@sqlstr2=@sqlstr2+name + ', ' from (select case
-- when a.xtype =173 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar( '+convert(varchar(4),a.length*2+2)+ '), '+a.name + ') '+ ' end '
when a.xtype =104 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(1), '+a.name + ') '+ ' end '
when a.xtype =175 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'replace( '+a.name+ ', ' ' ' ' ' ' ' ', ' ' ' ' ' ' ' ' ' ' ' ') ' + '+ ' ' ' ' ' ' ' ' '+ ' end '
when a.xtype =61 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'convert(varchar(23), '+a.name + ',121) '+ '+ ' ' ' ' ' ' ' ' '+ ' end '
when a.xtype =106 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar( '+convert(varchar(4),a.xprec+2)+ '), '+a.name + ') '+ ' end '
when a.xtype =62 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(23), '+a.name + ',2) '+ ' end '
when a.xtype =56 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(11), '+a.name + ') '+ ' end '
when a.xtype =60 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(22), '+a.name + ') '+ ' end '
when a.xtype =239 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'replace( '+a.name+ ', ' ' ' ' ' ' ' ', ' ' ' ' ' ' ' ' ' ' ' ') ' + '+ ' ' ' ' ' ' ' ' '+ ' end '


when a.xtype =108 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar( '+convert(varchar(4),a.xprec+2)+ '), '+a.name + ') '+ ' end '
when a.xtype =231 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'replace( '+a.name+ ', ' ' ' ' ' ' ' ', ' ' ' ' ' ' ' ' ' ' ' ') ' + '+ ' ' ' ' ' ' ' ' '+ ' end '
when a.xtype =59 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(23), '+a.name + ',2) '+ ' end '
when a.xtype =58 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'convert(varchar(23), '+a.name + ',121) '+ '+ ' ' ' ' ' ' ' ' '+ ' end '
when a.xtype =52 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(12), '+a.name + ') '+ ' end '
when a.xtype =122 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(22), '+a.name + ') '+ ' end '
when a.xtype =48 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar(6), '+a.name + ') '+ ' end '
-- when a.xtype =165 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ 'convert(varchar( '+convert(varchar(4),a.length*2+2)+ '), '+a.name + ') '+ ' end '
when a.xtype =167 then 'case when '+a.name+ ' is null then ' 'NULL ' ' else '+ ' ' ' ' ' ' ' ' '+ '+ 'replace( '+a.name+ ', ' ' ' ' ' ' ' ', ' ' ' ' ' ' ' ' ' ' ' ') ' + '+ ' ' ' ' ' ' ' ' '+ ' end '
else ' ' 'NULL ' ' '
end as col,a.colid,a.name
from syscolumns a where a.id = object_id(@tablename) and a.xtype <> 189 and a.xtype <> 34 and a.xtype <> 35 and a.xtype <> 36
)t order by colid

select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+ ') '+left(@sqlstr1,len(@sqlstr1)-3)+ ') ' ' from '+@tablename
-- print @sqlstr
exec( @sqlstr)
set nocount off
end


[解决办法]

SQL Server 数据库脚本导出器 v2.0
http://www.hxitz.com/Code/Project/SQLServershujukujiaobendaochuqiv20.html

读书人网 >SQL Server

热点推荐