zoukankan      html  css  js  c++  java
  • 把表中的内容生成插入语句

    --把表中的内容生成插入语句

      1 CREATE PROCEDURE [dbo].[UspOutputData] @tablename sysname
      2 AS
      3 DECLARE @column VARCHAR(1000);
      4 DECLARE @columndata VARCHAR(1000);
      5 DECLARE @sql VARCHAR(4000);
      6 DECLARE @xtype TINYINT;
      7 DECLARE @name sysname;
      8 DECLARE @objectId INT;
      9 DECLARE @objectname sysname;
     10 DECLARE @ident INT;
     11 
     12 SET NOCOUNT ON;
     13 SET @objectId = OBJECT_ID(@tablename);
     14 
     15 IF @objectId IS NULL -- 判斷對象是否存在
     16 BEGIN
     17     PRINT 'The object not exists';
     18     RETURN;
     19 END;
     20 SET @objectname = RTRIM(OBJECT_NAME(@objectId));
     21 
     22 IF @objectname IS NULL
     23    OR CHARINDEX(@objectname, @tablename) = 0 --此判断不严密
     24 BEGIN
     25     PRINT 'object not in current database';
     26     RETURN;
     27 END;
     28 
     29 IF OBJECTPROPERTY(@objectId, 'IsTable') <> 1 -- 判斷對象是否是table
     30 BEGIN
     31     PRINT 'The object is not table';
     32     RETURN;
     33 END;
     34 
     35 SELECT @ident = status & 0x80
     36 FROM syscolumns
     37 WHERE id = @objectId
     38       AND status & 0x80 = 0x80;
     39 
     40 IF @ident IS NOT NULL
     41     PRINT 'SET IDENTITY_INSERT ' + @tablename + ' ON';
     42 
     43 DECLARE syscolumns_cursor CURSOR FOR
     44 SELECT c.name,
     45        c.xtype
     46 FROM syscolumns c
     47 WHERE c.id = @objectId
     48 ORDER BY c.colid;
     49 OPEN syscolumns_cursor;
     50 SET @column = '';
     51 SET @columndata = '';
     52 FETCH NEXT FROM syscolumns_cursor
     53 INTO @name,
     54      @xtype;
     55 WHILE @@fetch_status <> -1
     56 BEGIN
     57     IF @@fetch_status <> -2
     58     BEGIN
     59         IF @xtype NOT IN ( 189, 34, 35, 99, 98 ) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理
     60         BEGIN
     61             SET @column = @column + CASE
     62                                         WHEN LEN(@column) = 0 THEN
     63                                             ''
     64                                         ELSE
     65                                             ','
     66                                     END + @name;
     67             SET @columndata
     68                 = @columndata + CASE
     69                                     WHEN LEN(@columndata) = 0 THEN
     70                                         ''
     71                                     ELSE
     72                                         ','','','
     73                                 END + CASE
     74                                           WHEN @xtype IN ( 167, 175 ) THEN
     75                                               '''''''''+' + @name + '+'''''''''                       --varchar,char
     76                                           WHEN @xtype IN ( 231, 239 ) THEN
     77                                               '''N''''''+' + @name + '+'''''''''                      --nvarchar,nchar
     78                                           WHEN @xtype = 61 THEN
     79                                               '''''''''+convert(char(23),' + @name + ',121)+''''''''' --datetime
     80                                           WHEN @xtype = 58 THEN
     81                                               '''''''''+convert(char(16),' + @name + ',120)+''''''''' --smalldatetime
     82                                           WHEN @xtype = 36 THEN
     83                                               '''''''''+convert(char(36),' + @name + ')+'''''''''     --uniqueidentifier
     84                                           ELSE
     85                                               @name
     86                                       END;
     87         END;
     88     END;
     89     FETCH NEXT FROM syscolumns_cursor
     90     INTO @name,
     91          @xtype;
     92 END;
     93 CLOSE syscolumns_cursor;
     94 DEALLOCATE syscolumns_cursor;
     95 
     96 SET @sql
     97     = 'set nocount on select ''insert ' + @tablename + '(' + @column + ') values(''as ''--'',' + @columndata
     98       + ','')'' from ' + @tablename;
     99 
    100 PRINT '--' + @sql;
    101 EXEC (@sql);
    102 
    103 IF @ident IS NOT NULL
    104     PRINT 'SET IDENTITY_INSERT ' + @tablename + ' OFF';
    学无止境,贵在积累
  • 相关阅读:
    elk 之elasticsearch 部分参数参考(1)
    ubuntu16.04安装mariadb 缺少ncurses-devel
    死锁以及避免死锁
    python中的@
    Python中的logging模块
    Cannot find /usr/src/jdk1.7.0_79/lib/*.*/bin/setclasspath.sh 找不到文件
    shelve -- 用来持久化任意的Python对象
    Python-机器学习基础-K近邻算法
    Python-机器学习基础-Pandas
    Java-多线程
  • 原文地址:https://www.cnblogs.com/izhaofu/p/15438533.html
Copyright © 2011-2022 走看看