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

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

  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';

 

posted @ 2021-10-22 13:58  月亮邮递员  阅读(163)  评论(0编辑  收藏  举报