将表中的数据生成SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中

 来自:http://topic.csdn.net/u/20080310/09/f1c5c8d1-e60b-48ad-8068-fa5a58e59788.html?seed=491263436

CREATE PROCEDURE   dbo.OutputData    
 
@tablename   sysname     
 
AS     
 
declare   @column   varchar(1000)    
 
declare   @columndata   varchar(1000)    
 
declare   @sql   varchar(4000)    
 
declare   @xtype   tinyint     
 
declare   @name   sysname     
 
declare   @objectId   int     
 
declare   @objectname   sysname     
 
declare   @ident   int     

 
set   nocount   on     
 
set   @objectId=object_id(@tablename)    
 
if  @objectId   is   null   --   判断对象是否存在    
     begin     
     
print  @tablename +  '对象不存在'    
     
return     
   
end    
 
set @objectname=rtrim(object_name(@objectId))    
 
if @objectname is null or charindex(@objectname,@tablename)=0
   
begin     
     
print  @tablename +  '对象不在当前数据库中'     
     
return     
   
end        
 
if  OBJECTPROPERTY(@objectId,'IsTable')   <   >   1   --   判断对象是否是表    
    begin     
     
print  @tablename +  '对象不是表'    
     
return     
   
end        
 
select   @ident=status&0x80   from   syscolumns   where   id=@objectid   and   status&0x80=0x80         
 
if @ident is   not   null     
   
print   'SET   IDENTITY_INSERT   '+ @TableName + '   ON'    
 
--定义游标,循环取数据并生成Insert语句
  declare  syscolumns_cursor  cursor for  
   
select   c.name,c.xtype   from   syscolumns   c    
     
where   c.id=@objectid    
     
order   by   c.colid    
 
--打开游标
  open   syscolumns_cursor    
 
set  @column=''    
 
set  @columndata=''    
 
fetch   next   from   syscolumns_cursor   into   @name,@xtype    
 
while   @@fetch_status   <> -1    
   
begin     
   
if   @@fetch_status   <> -2    
     
begin     
     
if   @xtype   not   in(189,34,35,99,98)   --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理    
        begin     
       
set   @column=@column +
         
case   when   len(@column)=0   then '' 
                
else   ','
                
end + @name    
       
set   @columndata = @columndata +
         
case   when   len(@columndata)=0   then   ''  
                
else   ','','','
                
end  +
         
case   when  @xtype   in(167,175then   '''''''''+'+@name+'+'''''''''                --varchar,char    
                 when   @xtype   in(231,239)   then   '''N''''''+'+@name+'+'''''''''             --nvarchar,nchar    
                 when   @xtype=61   then   '''''''''+convert(char(23),'+@name+',121)+'''''''''   --datetime    
                 when   @xtype=58   then   '''''''''+convert(char(16),'+@name+',120)+'''''''''   --smalldatetime    
                  when   @xtype=36   then   '''''''''+convert(char(36),'+@name+')+'''''''''       --uniqueidentifier    
                 else   @name  
                
end     
       
end     
     
end     
   
fetch   next   from   syscolumns_cursor   into   @name,@xtype    
   
end     
 
close   syscolumns_cursor    
 
deallocate   syscolumns_cursor         
 
set  @sql='set   nocount   on   select   ''insert   '+@tablename+'('+@column+')   values(''as   ''--'','+@columndata+','')''   from   '+@tablename        
 
print   '--'+@sql    
 
exec(@sql)         
 
if   @ident   is   not   null     
 
print  'SET   IDENTITY_INSERT   '+@TableName+'   OFF'    
调用时
exec   OutputData   'myuser' 其中myUser中当前数据库中存在的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据数据保持同步,故数据SQL脚本非常作用。比如:数据库主脚本,副脚本,增量脚本。 3、 什么是主脚本、副脚本、增量脚本呢? 3.1、主脚本数据库表或存储过程,视图脚本,序列等脚本。 3.2、副脚本指必须执行脚本之后才执行脚本。换句话说在没执行主键脚本的情况下,副脚本执行之后会回滚事务失败。 3.3、增量脚本指在执行脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则需要的SQL脚本。 2、减少人工编写SQL脚本出错率问题,完全通过程序检测SQL准确性。 3、帮助开发人员提高SQL编写效率,减少人工编写SQL开发成本问题。 4、帮助开发人员节约时间,同时避免繁琐不必要编写SQL的工作。 二、实现方式与原理 2.1实现方式 1、实现方式分:正向与逆向实现。什么是正向与逆行呢【是否有鸡还是有蛋,先后道理同等】 2、正向方式:首先把设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 3、逆向方式:首先有数据库表,然后通过ORM持久化技术连接数据库再读取表的字段等属性出来,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 2.2原理 对数据库软件内置核心表或视图查询出来存储用户行为表结构所有属性信息,对此属性结构信息进行分析与组装所需要SQL脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值