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条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配