• 根据数据表名导出数据表的内容


    USE [mydb]
    GO
    /****** Object: StoredProcedure [dbo].[OutputData] Script Date: 03/12/2012 11:44:00 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER 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 'The object not exists'
    return
    end
    set @objectname=rtrim(object_name(@objectId))

    if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
    begin
    print 'object not in current database'
    return
    end

    if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
    begin
    print 'The object is not table'
    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'

    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'

  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/ShaYeBlog/p/2628664.html
Copyright © 2020-2023  润新知