1. 程式人生 > 其它 >把表中的內容生成插入語句

把表中的內容生成插入語句

--把表中的內容生成插入語句

  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';
學無止境,貴在積累