SQL Server 开发之 复制表数据的SQL脚本生成器

server|脚本|数据

使用SQL Server 2000自带的“生成SQL脚本”工具,可以生成创建表、视图、存储过程等的SQL脚本。那么,能否将表中的数据也生成为SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中呢?答案是肯定的。下面的存储过程是一位高人写的,这位高人的姓氏已无人知晓,但SQL Server社区中偶尔还可看到此不朽之作。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,175)  then   '''''''''+'+@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中当前数据库中存在的表   

时间: 2024-08-02 12:05:17

SQL Server 开发之 复制表数据的SQL脚本生成器的相关文章

清空SQL Server数据库中所有表数据的方法

原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般

MySQL复制表数据操作sql语句

MySQL复制表数据操作相信大家都不会太陌生,下面就为您详细介绍MySQL复制表数据到新表的步骤,希望对您会有所启迪.  1.MySQL复制表结构及数据到新表   代码如下 复制代码    CREATE TABLE 新表  SELECT * FROM 旧表      2.只复制表结构到新表   代码如下 复制代码    CREATE TABLE 新表  SELECT * FROM 旧表 WHERE 1=2  即:让WHERE条件不成立.  方法二:(低版本的mysql不支持,mysql4.0.2

SQL Server查找与删除表重复记录sql语句

在该示例中,我们将使用下表,它具有重复的 PK 值.在该表中,主键是两列(col1.col2).我们无法创建唯一索引或主键约束,因为这两行具有重复的 PK.该过程演示如何识别和删除重复的主键.    代码如下 复制代码 create table t1(col1 int, col2 int, col3 char(50)) insert into t1 values (1, 1, 'data value one') insert into t1 values (1, 1, 'data value o

SQL Server批量替换所有表中内容sql语句

代码如下:  代码如下 复制代码 declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b ,systypes c where a.id=b.id and a.xtype='u' and c.name /*"u"为你要操作的数据类型,不改为全部数据类型,不想麻烦就不用修改了*/ in ('char'

pl /sql导入导出表结构,表数据,sql脚本

导出表结构: Tools-->Export User Objects(导出用户对象) -->选择要导出的表(包括Sequence等)-->.sql文件,导出的都为sql文件 导出表数据: Tools-->Export Tables-->选择表,选择SQL Inserts-->.sql文件   导入表结构: 执行刚刚导出的sql文件,记住要删掉table前的用户名,比如以前这表名为sys.tablename,必须删除sys 导入表数据: 执行刚刚导出的sql文件

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题:消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Dis

Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.2.0.1337 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之二

在SQL Server数据库中批量导入数据

第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中. 在使用这条语句的时候,需要注意几个方面的内容. 假设有一个表table1,字段为f1(int).f2(varchar(50)).  代码如下 复制代码 SELECT*INTO table2 FROM table1 这条SQL语的在建立table2表

SQL Server 2005同步复制

原文:SQL Server 2005同步复制 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作:1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户. 2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访).打开1433端口,在防火墙中设特例 3.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录.例如:在D盘根目录下建文件夹名为SqlCopy 4.设置SQL 代理(发布服务器和订