生成表insert into语句的存储过程

CREATE PROC [dbo].[proc_insert]
    (
      @tablename VARCHAR(256) ,
      @where NVARCHAR(MAX) = ''
    )
AS
    BEGIN
        SET nocount ON
        DECLARE @sqlstr VARCHAR(4000)
        DECLARE @sqlstr1 VARCHAR(4000)
        DECLARE @sqlstr2 VARCHAR(4000)
        SELECT  @sqlstr = 'select ''insert ' + @tablename
        SELECT  @sqlstr1 = ''
        SELECT  @sqlstr2 = ' ('
        SELECT  @sqlstr1 = ' values ( ''+'
        SELECT  @sqlstr1 = @sqlstr1 + col + '+'',''+' ,
                @sqlstr2 = @sqlstr2 + name + ','
        FROM    ( SELECT    CASE 
								-- when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
                                 WHEN a.xtype = 127
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(20),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 104
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(1),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 175
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'replace(' + a.name
                                      + ','''''''','''''''''''')'
                                      + '+''''''''' + ' end'
                                 WHEN a.xtype = 61
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'convert(varchar(23),'
                                      + a.name + ',121)' + '+'''''''''
                                      + ' end'
                                 WHEN a.xtype = 106
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar('
                                      + CONVERT(VARCHAR(4), a.xprec + 2)
                                      + '),' + a.name + ')' + ' end'
                                 WHEN a.xtype = 62
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(23),' + a.name
                                      + ',2)' + ' end'
                                 WHEN a.xtype = 56
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(11),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 60
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(22),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 239
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'replace(' + a.name
                                      + ','''''''','''''''''''')'
                                      + '+''''''''' + ' end'
                                 WHEN a.xtype = 108
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar('
                                      + CONVERT(VARCHAR(4), a.xprec + 2)
                                      + '),' + a.name + ')' + ' end'
                                 WHEN a.xtype = 231
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'replace(' + a.name
                                      + ','''''''','''''''''''')'
                                      + '+''''''''' + ' end'
                                 WHEN a.xtype = 59
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(23),' + a.name
                                      + ',2)' + ' end'
                                 WHEN a.xtype = 58
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'convert(varchar(23),'
                                      + a.name + ',121)' + '+'''''''''
                                      + ' end'
                                 WHEN a.xtype = 52
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(12),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 122
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(22),' + a.name + ')'
                                      + ' end'
                                 WHEN a.xtype = 48
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + 'convert(varchar(6),' + a.name + ')'
                                      + ' end'
										-- when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
                                 WHEN a.xtype = 167
                                 THEN 'case when ' + a.name
                                      + ' is null then ''NULL'' else '
                                      + '''''''''+' + 'replace(' + a.name
                                      + ','''''''','''''''''''')'
                                      + '+''''''''' + ' end'
                                 ELSE '''NULL'''
                            END AS col ,
                            a.colid ,
                            a.name
                  FROM      syscolumns a
                  WHERE     a.id = OBJECT_ID(@tablename)
                            AND a.xtype <> 189
                            AND a.xtype <> 34
                            AND a.xtype <> 35
                            AND a.xtype <> 36
                ) t
        ORDER BY colid

        SELECT  @sqlstr = @sqlstr + LEFT(@sqlstr2, LEN(@sqlstr2) - 1) + ') '
                + LEFT(@sqlstr1, LEN(@sqlstr1) - 3) + ')'' from ' + @tablename 
        IF @where <> ''
            SET @sqlstr += ' where ' + @where
-- print @sqlstr
        EXEC( @sqlstr)
        SET nocount OFF
    END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值