USE [DB_B]
GO
/****** Object:  StoredProcedure [dbo].[SP_Upload_FZSRV]    Script Date: 2017/2/18 下午 02:14:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Create date: 20170217
-- Description: 環境  DB_B  LinkServerName =FZSRV.DB_C

-- EXEC SP_Upload_FZSRV
-- a.讀取FileControl 控制檔
-- b.gen 出table的語法
-- c.連到DB_C去產生table
-- e.將DB_B的資料copy到DB_C
-- f.更新FileControl 控制檔
-- =============================================
ALTER PROCEDURE [dbo].[SP_Upload_FZSRV]
AS
BEGIN
 SET NOCOUNT ON;
    DECLARE @TABLE_NAME nvarchar(100)
    DECLARE @SQL nvarchar(max)
 DECLARE @IsExist char(1)
 DECLARE @IsErrFlag char(1)
 DECLARE @ReturnSQL as nvarchar(max) 
 DECLARE @spname  varchar(50)
 DECLARE @ERROR int
 DECLARE @ROWCOUNT int
 DECLARE @ERROR_MESSAGE nvarchar(4000)
 SET @spname='SP_Upload_FZSRV'
 SET @IsErrFlag = 'N'

 INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'BEGIN **********************' , '0' , '' , ''
    
  INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'CHECK FileControl BEGIN' , '0' , '' , ''
 Declare cur_TABLE Cursor for   
 select  TABLE_NAME  from FileControl   where IsUpload = '2' and  len(TABLE_NAME) >= 10 order by TABLE_NAME
 Open cur_TABLE
 Fetch next from cur_TABLE
 Into @TABLE_NAME 
   
 while (@@fetch_status = 0)
   begin 

   print '*****************************************'
   print '********   '+ @TABLE_NAME+ '  ******************'            
   print '*****************************************'

   INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Gen Script ' + @TABLE_NAME + ' BEGIN', '0' , '' , ''

   --先到FZSRV產生Table
   print '產生Create Table語法 start --------------------------------------'

   --下兩行暫時無法使用,待
   --SET @SQL = ' Declare @CreSQL as varchar(max) exec [SP_Creat_Table] ''DB_B'',''' + @TABLE_NAME +''',@CreSQL OUTPUT'
   --EXEC sp_executesql @SQL,@CreSQL = @ReturnSQL OUTPUT  
   SET @SQL =  'EXEC  [SP_Creat_Table] 'DB_B','TABLE_NAME',@ReturnSQL OUTPUT ' 

   INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Gen Script ' + @TABLE_NAME + ' START', '0' , '' , @SQL  
   BEGIN TRY
             EXEC  [SP_Creat_Table] 'DB_B','TABLE_NAME',@ReturnSQL OUTPUT       
            INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Gen Script ' + @TABLE_NAME + ' END', '0' , '' , @ReturnSQL  
   SET @IsErrFlag = 'N'
   END TRY
   BEGIN CATCH
      SET @IsErrFlag = 'Y'
     SET @ERROR = @@ERROR
     SET @ROWCOUNT = @@ROWCOUNT
     SET @ERROR_MESSAGE = ERROR_MESSAGE()
     INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Gen Script ' + @TABLE_NAME + ' ERROR', @ERROR , @ERROR_MESSAGE , '' 
   END CATCH 
   print '產生Create Table語法 end --------------------------------------'
 
      INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Create Table ' + @TABLE_NAME + ' BEGIN', '0' , '' , '@IsErrFlag=' +@IsErrFlag
      if  @IsErrFlag = 'N'
   begin
    print ''
    print 'Create Table語法 start --------------------------------------'
需遠端的SERVER要提供exec用來執行程式 (請參考【SQL】 sp_exec )
    SET @SQL = 'EXEC [FZSRV].[master].dbo.sp_exec ' + @ReturnSQL  
    INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Create Table ' + @TABLE_NAME + ' START', '0' , '' , @SQL  
    BEGIN TRY
       EXEC [FZSRV].[master].dbo.sp_exec @ReturnSQL 
       INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Create Table ' + @TABLE_NAME + ' END', '0' , '' , ''  
       SET @IsErrFlag = 'N'
    END TRY
    BEGIN CATCH
      SET @IsErrFlag = 'Y'
      SET @ERROR = @@ERROR
      SET @ROWCOUNT = @@ROWCOUNT
      SET @ERROR_MESSAGE = ERROR_MESSAGE()
      INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Create Table ' + @TABLE_NAME + ' ERROR', @ERROR , @ERROR_MESSAGE , '' 
    END CATCH 
    print 'Create Table語法 end --------------------------------------'
   end
 
      INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Copy  ' + @TABLE_NAME + ' BEGIN', '0' , '' , '@IsErrFlag=' +@IsErrFlag
      if  @IsErrFlag = 'N'
   begin
    print ''
    print 'Insert data  start --------------------------------------'
    SET @SQL = 'INSERT INTO [FZSRV].DB_C.dbo.' + @TABLE_NAME  
    SET @SQL = @SQL + ' select * from DB_B.dbo.' + @TABLE_NAME

    INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Copy ' + @TABLE_NAME + ' START', '0' , '' , @SQL  
    BEGIN TRY
      EXEC (@SQL)
      INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Copy ' + @TABLE_NAME + ' END', '0' , '' , ''  
      SET @IsErrFlag = 'N'
    END TRY
    BEGIN CATCH
      SET @IsErrFlag = 'Y'
      SET @ERROR = @@ERROR
      SET @ROWCOUNT = @@ROWCOUNT
      SET @ERROR_MESSAGE = ERROR_MESSAGE()
    INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'Copy ' + @TABLE_NAME + ' ERROR', @ERROR , @ERROR_MESSAGE , '' 
    END CATCH
    print 'Insert data  end --------------------------------------'
    print ''
   end

   --更新上傳記號
   INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'SET IsUpload=Y BEGIN', '0' , '' , '@IsErrFlag=' + @IsErrFlag     
   if  @IsErrFlag = 'N'
   begin
    SET @SQL = ' UPDATE   DB_B.dbo.FileControl  SET IsUpload = ''Y'' WHERE TABLE_NAME=''' + @TABLE_NAME +''' '    
    INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'SET IsUpload=Y  START', '0' , '' , @SQL
     BEGIN TRY
        EXEC (@SQL) 
        INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'SET IsUpload=Y  END', '0' , '' , ''  
     SET @IsErrFlag = 'N'
     END TRY
     BEGIN CATCH
        SET @IsErrFlag = 'Y'
        SET @ERROR = @@ERROR
        SET @ROWCOUNT = @@ROWCOUNT
        SET @ERROR_MESSAGE = ERROR_MESSAGE()
        INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'SET IsUpload=Y  ERROR', @ERROR , @ERROR_MESSAGE , ''     
     END CATCH
  end

  Fetch next from cur_TABLE
  Into @TABLE_NAME

   end   
  
  close cur_TABLE
  deallocate cur_TABLE
  
  INSERT INTO BatchLog(DscptMain , DscptSub , Error , ErrorMsg, SQL ) SELECT @spname , 'FINISH **********************' , '0' , '' , '' 
END

 

文章標籤
全站熱搜
創作者介紹
創作者 可樂果公主 的頭像
可樂果公主

聽說幸福…在山的那邊 (浪機子)

可樂果公主 發表在 痞客邦 留言(0) 人氣(95)