none
Validar Procedure SQL RRS feed

  • Pergunta

  • Olá pessoal eu criei uma procedure e estou precisando de ajuda para validar a mesma.

    O Objetivo da procedure é ela verificar se a foto de um cliente existe na pasta que tenho as imagens, se ela existir a imagem deve ser importada em digito binario pra uma tabela virtual e depois irei executar a procedure para que a mesma me retorne a foto.

    A proceure funciona corretamente quando a foto do cliente existe na pasta, vejam o codigo:

       

    CREATE PROCEDURE FOTO (@CLIENTE INT, @PATH VARCHAR(MAX))
    AS
    BEGIN
    DECLARE @CAMINHO AS VARCHAR(MAX), @COMANDO VARCHAR(MAX)

    SELECT
      @CAMINHO = @PATH +  REPLACE(C.NOME,' ','_') + '_' + CAST(C.CODIGO AS VARCHAR(10)) + '.jpg'
     FROM CLIENTES C WITH(NOLOCK) 
    WHERE C.CODIGO = @CLIENTE

      SET @COMANDO = 'SELECT * FROM OPENROWSET(BULK N' + '''' + @CAMINHO + '''' + ' , SINGLE_BLOB) Load'

      EXEC (@COMANDO)


      RETURN 
    END

    E para executar a mesma uso o seguinte comando abaixo:

    EXEC FOTO 21,'D:\fotos\'

    O problema aqui é que o comando executa corretamente se a foto existe no caminho que especifiquei se não existe ela me retorna um erro de que não.

    Eu preciso é de uma validação antes da procedure ser executada, então estou usando o seguinte comando para validar:

    EXEC master..xp_fileexist 'D:\fotos\nomecliente_21.jpg', out

    O retorno disso é sempre zero, ou seja, nunca me retorna algo que existe.

    Será que alguém pode me ajudar com essa validação?

    Obrigado.






    segunda-feira, 12 de setembro de 2016 11:50

Respostas

  • Bom dia,

    Você poderia fazer da forma abaixo, onde você deve pegar a msg de retorno da procedure.

    ALTER PROCEDURE FOTO (@CLIENTE INT, @PATH VARCHAR(MAX))
    AS
    BEGIN
    DECLARE @CAMINHO AS VARCHAR(MAX), @COMANDO VARCHAR(MAX)
    DECLARE @RETORNO AS VARCHAR(MAX)

    SELECT  @CAMINHO = @PATH +  REPLACE(C.NOME,' ','_') + '_' + CAST(C.CODIGO AS VARCHAR(10)) + '.jpg'
    FROM CLIENTES C WITH(NOLOCK) 
    WHERE C.CODIGO = @CLIENTE;

    BEGIN  TRY
    SET @COMANDO = 'SELECT * FROM OPENROWSET(BULK N' + '''' + @CAMINHO + '''' + ' , SINGLE_BLOB) Load';
    EXEC (@COMANDO);
    END TRY
    BEGIN CATCH
    RAISERROR('NÃO EXISTE IMAGEM PARA SER CARREGADA', 14, 1);
    END CATCH   
    END

    segunda-feira, 12 de setembro de 2016 12:38
  • Eu consegui resolver o meu problema com o comando abaixo:

    DECLARE @CAMINHO NVARCHAR(MAX);
    DECLARE @COMANDO NVARCHAR(MAX);
    DECLARE @foto VARBINARY(max);
    DECLARE @Parametro NVARCHAR(max);
    DECLARE @PATH VARCHAR(MAX);

    set @PATH = 'C:\imagens\fotos\';

    SET @Parametro = N'@fotoParametro varbinary(max) output';

    SELECT
      @CAMINHO = @PATH +  REPLACE(F.NOME,' ','_') + '_' + CAST(F.CODIGO AS VARCHAR(10)) + '.jpg'
      FROM FISICA F WITH(NOLOCK) 
     WHERE F.CODIGO = :CODIGOFISICA

    SET @COMANDO = N'SELECT @fotoParametro = BulkColumn FROM OPENROWSET(BULK N' + '''' + @CAMINHO + '''' + ' , SINGLE_BLOB) Load'

    BEGIN TRY

    EXEC sp_executesql @COMANDO, @Parametro, @fotoParametro = @foto OUTPUT;

    END TRY
    BEGIN CATCH

    set @foto = NULL

    END CATCH

    quarta-feira, 5 de julho de 2017 17:45

Todas as Respostas

  • Bom dia,

    Você poderia fazer da forma abaixo, onde você deve pegar a msg de retorno da procedure.

    ALTER PROCEDURE FOTO (@CLIENTE INT, @PATH VARCHAR(MAX))
    AS
    BEGIN
    DECLARE @CAMINHO AS VARCHAR(MAX), @COMANDO VARCHAR(MAX)
    DECLARE @RETORNO AS VARCHAR(MAX)

    SELECT  @CAMINHO = @PATH +  REPLACE(C.NOME,' ','_') + '_' + CAST(C.CODIGO AS VARCHAR(10)) + '.jpg'
    FROM CLIENTES C WITH(NOLOCK) 
    WHERE C.CODIGO = @CLIENTE;

    BEGIN  TRY
    SET @COMANDO = 'SELECT * FROM OPENROWSET(BULK N' + '''' + @CAMINHO + '''' + ' , SINGLE_BLOB) Load';
    EXEC (@COMANDO);
    END TRY
    BEGIN CATCH
    RAISERROR('NÃO EXISTE IMAGEM PARA SER CARREGADA', 14, 1);
    END CATCH   
    END

    segunda-feira, 12 de setembro de 2016 12:38
  • Eu consegui resolver o meu problema com o comando abaixo:

    DECLARE @CAMINHO NVARCHAR(MAX);
    DECLARE @COMANDO NVARCHAR(MAX);
    DECLARE @foto VARBINARY(max);
    DECLARE @Parametro NVARCHAR(max);
    DECLARE @PATH VARCHAR(MAX);

    set @PATH = 'C:\imagens\fotos\';

    SET @Parametro = N'@fotoParametro varbinary(max) output';

    SELECT
      @CAMINHO = @PATH +  REPLACE(F.NOME,' ','_') + '_' + CAST(F.CODIGO AS VARCHAR(10)) + '.jpg'
      FROM FISICA F WITH(NOLOCK) 
     WHERE F.CODIGO = :CODIGOFISICA

    SET @COMANDO = N'SELECT @fotoParametro = BulkColumn FROM OPENROWSET(BULK N' + '''' + @CAMINHO + '''' + ' , SINGLE_BLOB) Load'

    BEGIN TRY

    EXEC sp_executesql @COMANDO, @Parametro, @fotoParametro = @foto OUTPUT;

    END TRY
    BEGIN CATCH

    set @foto = NULL

    END CATCH

    quarta-feira, 5 de julho de 2017 17:45