如何验证海量文件名称sql?

时间:2017-09-11 15:51:13

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012

我需要验证文件名是否已在我的表“TBL_PAGO_DIARIO_Nextel”上传。

开始我已经有一个表格,其中包含我从SSIS上传的文件名称

表格如下:

tbl_filenames

RC196012070801
RC196017080401

我需要验证它们中的每一个“RC196012070801,RC196017080401”,如果它们已经在我的桌子“TBL_PAGO_DIARIO_Nextel”上。 我有想法用商店程序来做,但我不确切知道如何 因为例如如果第一个已经输入表“TBL_PAGO_DIARIO_Nextel”,那么就不应该插入它并只显示一个消息并继续第二个并继续。

我现在正在这样做:

create procedure sp_validateFile_Entel
@nomfile varchar(14)
as

declare @ncant int

select @ncant = count(*) from TBL_PAGO_DIARIO_Nextel where s_Empresa_Code = 'cperu' and s_Nombre_Vol = @nomfile

这只是接受一个文件,我不需要它。我需要一对一阅读并验证其中一些是否收费请帮助我。

感谢!!!

1 个答案:

答案 0 :(得分:0)

选项1 如果一个文件不存在,则一次只插入一个文件

IF OBJECT_ID('dbo.usp_validateFile_Entel') IS NULL
    EXEC ('CREATE PROCEDURE dbo.usp_validateFile_Entel AS RETURN 0;');
GO
ALTER PROCEDURE dbo.usp_validateFile_Entel
@nomfile VARCHAR(14)
AS
BEGIN
    --Only insert new record if @nomfile does NOT exist already
    IF NOT EXISTS ( SELECT 1 FROM TBL_PAGO_DIARIO_Nextel WHERE s_Empresa_Code = 'cperu' AND s_Nombre_Vol = @nomfile )
    BEGIN
        INSERT INTO TBL_PAGO_DIARIO_Nextel(
            s_Empresa_Code, s_Nombre_Vol
        )
        VALUES(
            'cperu', @nomfile
        );
    END;
END

选项2 使用现有表[tbl_filenames]

中的数据插入
--Create the tables
IF OBJECT_ID('TBL_PAGO_DIARIO_Nextel','U') IS NOT NULL
    DROP TABLE TBL_PAGO_DIARIO_Nextel;
IF OBJECT_ID('tbl_filenames','U') IS NOT NULL
    DROP TABLE tbl_filenames;

CREATE TABLE TBL_PAGO_DIARIO_Nextel ( s_Empresa_Code VARCHAR(20), s_Nombre_Vol VARCHAR(14) )

CREATE TABLE tbl_filenames ( FileNames VARCHAR(14))

--Insert some temp values
INSERT INTO dbo.tbl_filenames ( FileNames )
    VALUES ('RC196012070801'), ('RC196012070801' )

--Create the Procedure
IF OBJECT_ID('dbo.usp_validateFile_Entel') IS NULL
  EXEC ('CREATE PROCEDURE dbo.usp_validateFile_Entel AS RETURN 0;');
GO
ALTER PROCEDURE dbo.usp_validateFile_Entel
    --Input Parameters
AS
BEGIN

    --Only exist if data doesn't exist already
    INSERT INTO TBL_PAGO_DIARIO_Nextel(
        s_Empresa_Code, s_Nombre_Vol
     )
    SELECT 'cperu', T.FileNames 
    FROM 
        dbo.tbl_filenames T
    WHERE
        NOT EXISTS
            (   SELECT P.s_Nombre_Vol 
                FROM TBL_PAGO_DIARIO_Nextel P 
                WHERE P.s_Empresa_Code = 'cperu' 
                AND P.s_Nombre_Vol = T.FileNames 
            )
END ;
GO

--Exexute the Procedure
EXEC dbo.usp_validateFile_Entel

--Check the Results in the table
SELECT * FROM TBL_PAGO_DIARIO_Nextel

--Drop the tables
IF OBJECT_ID('TBL_PAGO_DIARIO_Nextel','U') IS NOT NULL
    DROP TABLE TBL_PAGO_DIARIO_Nextel;
IF OBJECT_ID('tbl_filenames','U') IS NOT NULL
    DROP TABLE tbl_filenames;