zoukankan      html  css  js  c++  java
  • sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    create PROCEDURE [sp_getinsert]
        (
          @tablename VARCHAR(256) , --如果非默认架构,可以加上架构名 例如:schema1.tablename
          @where VARCHAR(1000) = '',
          @create BIT =0
        )
    AS
        BEGIN
            SET NOCOUNT ON;
    
            IF @create=1
            EXEC sp_gettext @name=@tablename,@identity=1,@index=2;
    
            DECLARE @sqlstr VARCHAR(max)= '';
            DECLARE @sqlstr1 VARCHAR(max);
            DECLARE @sqlstr2 VARCHAR(max) ,
                @HasIdentity BIT;       
    
    
            SET @HasIdentity = OBJECTPROPERTY(OBJECT_ID(@tablename),
                                              'TableHasIdentity');      
    
            IF ( @HasIdentity = 1 )
                SET @sqlstr = @sqlstr + ' select ''SET IDENTITY_INSERT '
                    + @tablename + ' ON'' UNION ALL ' + CHAR(10); 
                      
    
            SELECT  @sqlstr = @sqlstr + 'select ''insert ' + @tablename;
            SELECT  @sqlstr1 = '';
            SELECT  @sqlstr2 = ' (';
            SELECT  @sqlstr1 = ' values ( ''+';
            SELECT  @sqlstr1 = @sqlstr1 + col + '+'',''+',
                    @sqlstr2 = @sqlstr2 + QUOTENAME(name) + ','
            FROM    (
                      SELECT    CASE 
    -- when a.xtype =173 then 'case when '+QUOTENAME(a.name)+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+QUOTENAME(a.name) +')'+' end'
                                     WHEN a.xtype = 127
                                     THEN 'case when ' + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT end)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(20),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 104
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(1),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 175
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'replace('
                                          + QUOTENAME(a.name)
                                          + ','''''''','''''''''''')'
                                          + '+''''''''' + ' end'
                                     WHEN a.xtype = 61
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'convert(varchar(23),'
                                          + QUOTENAME(a.name) + ',121)'
                                          + '+''''''''' + ' end'
                                     WHEN a.xtype = 106
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar('
                                          + CONVERT(VARCHAR(4), a.xprec + 2)
                                          + '),' + QUOTENAME(a.name) + ')'
                                          + ' end'
                                     WHEN a.xtype = 62
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(23),'
                                          + QUOTENAME(a.name) + ',2)' + ' end'
                                     WHEN a.xtype = 56
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(11),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 60
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(22),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 239
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'replace('
                                          + QUOTENAME(a.name)
                                          + ','''''''','''''''''''')'
                                          + '+''''''''' + ' end'
                                     WHEN a.xtype = 108
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar('
                                          + CONVERT(VARCHAR(4), a.xprec + 2)
                                          + '),' + QUOTENAME(a.name) + ')'
                                          + ' end'
                                     WHEN a.xtype = 231
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'replace('
                                          + QUOTENAME(a.name)
                                          + ','''''''','''''''''''')'
                                          + '+''''''''' + ' end'
                                     WHEN a.xtype = 59
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(23),'
                                          + QUOTENAME(a.name) + ',2)' + ' end'
                                     WHEN a.xtype = 58
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'convert(varchar(23),'
                                          + QUOTENAME(a.name) + ',121)'
                                          + '+''''''''' + ' end'
                                     WHEN a.xtype = 52
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(12),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 122
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(22),'
                                          + QUOTENAME(a.name) + ')' + ' end'
                                     WHEN a.xtype = 48
                                     THEN 'case when ' + QUOTENAME(a.name)
                                          + ' is null then ''NULL'' else '
                                          + 'convert(varchar(6),'
                                          + QUOTENAME(a.name) + ')' + ' end'
    -- when a.xtype =165 then 'case when '+QUOTENAME(a.name)+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+QUOTENAME(a.name) +')'+' end'
                                     WHEN a.xtype = 167
                                     THEN 'case when ' + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT  end)
                                          + ' is null then ''NULL'' else '
                                          + '''''''''+' + 'replace('
                                          + QUOTENAME(a.name)+(CASE WHEN collation ='Chinese_PRC_CI_AS' THEN '' ELSE ' collate '+collation COLLATE DATABASE_DEFAULT  end)
                                          + ','''''''','''''''''''')'
                                          + '+''''''''' + ' 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
                    + ( CASE WHEN @where IS NOT NULL
                                  AND LEN(@where) > 0 THEN ' where ' + @where
                             ELSE ''
                        END );
    
            IF ( @HasIdentity = 1 )
                SET @sqlstr = @sqlstr
                    + '  UNION ALL select ''SET IDENTITY_INSERT ' + @tablename
                    + ' OFF'' ' + CHAR(10); 
                      
            PRINT @sqlstr;
            EXEC( @sqlstr);
            SET NOCOUNT OFF;
        END;

    调用示例:

    exec [sp_getinsert] @tablename='tablename',@where='id>5 ',@create=0
  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/davidhou/p/9112291.html
Copyright © 2011-2022 走看看