批量插入的SQL日志条目

时间:2013-12-26 21:34:50

标签: sql logging insert bulk

巨大的粉丝,刚刚注册,因为我被卡住了。我有一组CSV文件,通过电子邮件发送并下载并自动保存以供夜间报告使用。如果其中一个文件丢失,则作业失败,我希望保持报告不发送,并希望将此操作建立在日志上。

以下是我为此创建的SP的开头。导入继续通过几个文件,然后在最后写入主表。我想改变两件事:

  1. 如果任何文件导入失败,则整个作业失败。如果文件不存在,我想继续工作,
  2. 将每个导入的结果写入带有时间戳的表和带有true或false的1或0。类似于:IF BULK INSERT SUCCESSFUL THEN INSERT INTO TABLE 'TIMEDATESTAMP','COMPANY NUMBER','1' ELSE (do the same except with 0)

    USE [Projects]
    GO
    /****** Object:  StoredProcedure [dbo].[uspTimeAttendanceImport]    Script Date: 12/26/2013 15:25:43 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    ALTER PROCEDURE [dbo].[uspTimeAttendanceImport] 
    
    AS
    begin
    --Create the temp table for staging the data.  Delete if it already exist.
    IF (OBJECT_ID('tempdb..##tblDailyHoursStaging') IS NOT NULL) DROP TABLE ##tblDailyHoursStaging
    
    create table ##tblDailyHoursStaging
    (
    strWorkDay VARCHAR(50) NULL,
    strEmployeeID VARCHAR(20) NOT NULL,
    dtmClockDate VARCHAR(14) NOT NULL,
    strCompanyCode VARCHAR(6) NULL,
    strDepartmentCode VARCHAR(6) NULL,
    strEarningCode VARCHAR(8) NULL,
    strEarningType VARCHAR (50) NULL,
    lngAmountEarned VARCHAR (20) NULL,
    lngHoursWorked VARCHAR(10) NULL
    )
    
    --Insert downloaded time clock data COMPANY 1000
    BULK
    INSERT ##tblDailyHoursStaging
    FROM 'D:\TimeAttendanceData\Flash Report 1000.csv'
    WITH
    (
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
    )
    

1 个答案:

答案 0 :(得分:0)

我会为此使用powershell。我假设这是在Windows平台上。通过使用powershell,您只需查看存在的文件。您可以在powershell中使用事务以及try / catch块。使用您提出的解决方案,如果发送新的csv文件,您将需要更改过程。