看到一很好的SQL代碼

轉載:[url]http://topic.csdn.net/u/20080310/09/f1c5c8d1-e60b-48ad-8068-fa5a58e59788.html[/url]
其功能是:將表中的數據生成SQL腳本,在查詢分析器中執行這些腳本後自動將數據導入到SQL Server中
CREATE PROCEDURE     dbo.OutputData            
    @tablename     sysname            
     AS            
     declare     @ column     varchar(1000)            
     declare     @columndata     varchar(1000)            
     declare     @sql     varchar(4000)            
     declare     @xtype     tinyint            
     declare     @ name     sysname            
     declare     @objectId     int            
     declare     @objectname     sysname            
     declare     @ident     int            

     set     nocount     on            
     set     @objectId= object_id(@tablename)            
     if    @objectId     is     null     --     判斷對象是否存在            
         begin            
             print    @tablename +     '對象不存在'            
             return            
         end            
     set @objectname= rtrim( object_name(@objectId))            
     if @objectname is null or charindex(@objectname,@tablename)=0
         begin            
             print    @tablename +     '對象不在當前數據庫中'            
             return            
         end                    
     if     OBJECTPROPERTY(@objectId, 'IsTable')     <     >     1     --     判斷對象是不是表            
         begin            
             print    @tablename +     '對象不是表'            
             return            
         end                    
     select     @ident=status&0x80     from     syscolumns     where     id=@objectid     and     status&0x80=0x80                    
     if @ident is     not     null            
         print     'SET     IDENTITY_INSERT     '+ @TableName + '     ON'            
     --定義遊標,循環取數據並生成Insert語句
     declare    syscolumns_cursor     cursor for        
         select     c. name,c.xtype     from     syscolumns     c            
             where     c.id=@objectid            
             order     by     c.colid            
     --打開遊標
     open     syscolumns_cursor            
     set    @ column= ''            
     set    @columndata= ''            
     fetch     next     from     syscolumns_cursor     into     @ name,@xtype            
     while     @@fetch_status     <> -1            
         begin            
         if     @@fetch_status     <> -2            
             begin            
             if     @xtype     not     in(189,34,35,99,98)     --timestamp不需處理,p_w_picpath,text,ntext,sql_variant 暫時不處理            
                 begin            
                 set     @ column=@ column +    
                     case     when     len(@ column)=0     then ''    
                                 else     ','
                                 end + @ name            
                 set     @columndata = @columndata +    
                     case     when     len(@columndata)=0     then     ''        
                                 else     ',' ',' ','
                                 end    +    
                     case     when    @xtype     in(167,175)     then     '' '' '' '' '+'+@ name+ '+' '' '' '' ''                                 --varchar,char            
                                 when     @xtype     in(231,239)     then     '' 'N' '' '' '+'+@ name+ '+' '' '' '' ''                         --nvarchar,nchar            
                                 when     @xtype=61     then     '' '' '' '' '+convert(char(23),'+@ name+ ',121)+' '' '' '' ''     --datetime            
                                 when     @xtype=58     then     '' '' '' '' '+convert(char(16),'+@ name+ ',120)+' '' '' '' ''     --smalldatetime            
                                     when     @xtype=36     then     '' '' '' '' '+convert(char(36),'+@ name+ ')+' '' '' '' ''             --uniqueidentifier            
                                 else     @ name        
                                 end            
                 end            
             end            
         fetch     next     from     syscolumns_cursor     into     @ name,@xtype            
         end            
     close     syscolumns_cursor            
     deallocate     syscolumns_cursor                    
     set    @sql= 'set     nocount     on     select     ' 'insert     '+@tablename+ '('+@ column+ ')     values(' 'as     ' '--'','+@columndata+','')''     from     '+@tablename                    
    print     '--'+@sql            
    exec(@sql)                    
    if     @ident     is     not     null            
    print    'SET     IDENTITY_INSERT     '+@TableName+'     OFF'            
調用時 exec     OutputData     'myuser' 其中myUser中當前數據庫中存在的表
相關文章
相關標籤/搜索