zoukankan      html  css  js  c++  java
  • 黄聪:SQL Server 开发之 复制表数据的SQL脚本生成器

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

    使用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中当前数据库中存在的表

       

  • 相关阅读:
    Mac Pro 安装 Sublime Text 2.0.2,个性化设置,主题 和 插件 收藏
    Mac Pro 编译安装 Nginx 1.8.1
    Mac Pro 解压安装MySQL二进制分发版 mysql-5.6.30-osx10.11-x86_64.tar.gz(不是dmg的)
    Mac Pro 修改主机名
    Mac Pro 软件安装/个性化配置 汇总
    Mac Pro 安装 Homebrew 软件包管理工具
    Mac Pro 使用 ll、la、l等ls的别名命令
    Mac Pro 入门、遇到的问题、个性化设置 汇总
    Linux/UNIX线程(2)
    工作流引擎activiti入门
  • 原文地址:https://www.cnblogs.com/huangcong/p/1900339.html
Copyright © 2011-2022 走看看