【问题标题】:How validate massive files name sql?如何验证海量文件名sql?
【发布时间】:2018-02-19 22:18:50
【问题描述】:

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

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

桌子看起来像这样:

tbl_filenames

RC196012070801
RC196017080401

如果它们已经在我的表“TBL_PAGO_DIARIO_Nextel”上,我需要验证它们中的每一个“RC196012070801,RC196017080401”。 我有想法用存储过程来做,但我不知道具体怎么做 因为例如,如果第一个已经在“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

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

谢谢!!!

【问题讨论】:

  • 您如何在一个程序中同时使用 SQL 2005、2008 和 2012?不要垃圾邮件标签......我也不明白你是如何在这里使用“收费”的。你的意思是改变了(比如文件被修改了)?
  • 你的问题一点都不清楚。但与此同时,您应该考虑使用与 sp_ 不同的前缀(或者甚至完全没有前缀)。 sp_ 前缀可能会给您带来一些问题。 sqlperformance.com/2012/10/t-sql-queries/sp_prefix
  • 为了帮助您解决问题,我们需要更多详细信息。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
  • @JacobH 。如果有人知道这就是为什么,我将它们全部标记为解决方案。我的意思是如果他们在我的桌子上被发现!
  • 我很清楚这个问题只需要验证文件的名称,比如在我的表 "tbl_filenames" 上显示的文件。如果我的表 TBL_PAGO_DIARIO_Nextel 上存在这些文件名之一。

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


【解决方案1】:

选项 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;

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2020-04-27
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多