summertie 2016-10-05 13:51 采纳率: 0%
浏览 999
已采纳

如何将现有的SQL语句生成新的脚本

有之前的.sql文件,在新的数据库中打开后。 想生成新的脚本文件。    基于现在的数据库。  该如何操作,  菜鸟一个,求大家指点下。 
  • 写回答

5条回答 默认 最新

  • 阮二 2016-10-07 23:31
    关注

    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'

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。