• sql根据一个表的数据生成插入脚本


    create Procedure [dbo].[sp_CreateDataLoadScript]
    @TblName varchar(128)
    as
    /*
    exec sp_CreateDataLoadScript 'MyTable'
    */


    create table #a (id int identity (1,1), ColType int, ColName varchar(128))

    insert #a (ColType, ColName)
    select case when DATA_TYPE like '%char%' then 1 else 0 end ,
    COLUMN_NAME
    from information_schema.columns
    where TABLE_NAME = @TblName
    order by ORDINAL_POSITION

    if not exists (select * from #a)
    begin
    raiserror('No columns found for table %s', 16,-1, @TblName)
    return
    end

    declare @id int ,
    @maxid int ,
    @cmd1 varchar(7000) ,
    @cmd2 varchar(7000)

    select @id = 0 ,
    @maxid = max(id)
    from #a

    select @cmd1 = 'select '' insert ' + @TblName + ' ( '
    select @cmd2 = ' + '' select '' + '
    while @id < @maxid
    begin
    select @id = min(id) from #a where id > @id

    select @cmd1 = @cmd1 + ColName + ','
    from #a
    where id = @id

    select @cmd2 = @cmd2
    + ' case when ' + ColName + ' is null '
    + ' then ''null'' '
    + ' else '
    +   case when ColType = 1 then  ''''''''' + ' + ColName + ' + ''''''''' else 'convert(varchar(20),' + ColName + ')' end
    + ' end + '','' + '
    from #a
    where id = @id
    end


    select @cmd1 = left(@cmd1,len(@cmd1)-1) + ' ) '' '
    select @cmd2 = left(@cmd2,len(@cmd2)-8) + ' from ' + @tblName

    select '/*' + @cmd1 + @cmd2 + '*/'

    exec (@cmd1 + @cmd2)
    drop table #a

  • 相关阅读:
    解题报告:luogu P3853 [TJOI2007]路标设置
    解题报告:luogu P2678 跳石头
    SG函数
    解题报告:CF622F
    解题报告:luogu P1144 最短路计数
    树剖小结(简述)
    LCA之tarjan离线
    %你赛2020.2
    一个小证明(题解 P5425 Part1)
    科创版简介
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/1618764.html
Copyright © 2020-2023  润新知