看到一很好的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中當前數據庫中存在的表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章