none
Pesquisa No Banco SQL Server RRS feed

  • Pergunta

  • Boa noite Pessoal.

    Estou desenvolvendo uma rotina em C#, onde estou precisando acessar o banco de dados usando um intervalo de números.

    ou seja, um intervalo De Ate. Existe alguma forma de enviar esse intervalo para dentro da minha procedure e carregar o meu datatable apenas com os registros que estão dentro do intervalo? 

    Eu não sei se me fiz entender?

    Garibaldo

    sexta-feira, 29 de maio de 2015 22:08

Respostas

  • A mensagem está sendo emitida porque as variáveis @NumeroCTeInicial e @NumeroCTeFinal não foram declaradas no escopo da procedure, e nem são parâmetros da mesma. Tente desta forma:

    CREATE PROCEDURE CONHECIMENTOS_FILIALSERIECONHECINTERVALO
    	@Filial_Origem		int
    	, @Serie_Conhec		varchar(3)
    	, @NumeroCTeInicial	int
    	, @NumeroCTeFinal	int
    AS
    BEGIN
    
    	SET NOCOUNT ON;
    
        SELECT
    		*
    	FROM
    		tbConhecimentos
    	WHERE
    		Filial_Origem = @Filial_Origem 
    		AND Serie_Conhec = @Serie_Conhec 
    		AND Numero_Conhec between @NumeroCTeInicial AND @NumeroCTeFinal
    
    END
    GO
    Note que apenas reescrevi seu script modificando os parâmetros da procedure.

    Se precisar, envia sua pergunta novamente.



    sábado, 30 de maio de 2015 01:09

Todas as Respostas

  • Olá, Garibaldo!

    Existe sim. Segue um link de um tutorial do Macoratti de como fazer isto do início ao fim, bem completo. Basicamente, você utilizará o camando:

    sqlCommand.Parameters.AddWithValue("@parametroDe", valorParametroDe);
    sqlCommand.Parameters.AddWithValue("@parametroAte", valorParametroAte);

    Na sua procedure, você utilizará estes parâmetros no between por exemplo:

    [..] where Numero between @parametroDe and @parametroAte

    Se precisar de mais informações sobre isto, envie sua pergunta.

    Bom trabalho!


    • Editado Rodrigo CdS sexta-feira, 29 de maio de 2015 22:31
    sexta-feira, 29 de maio de 2015 22:28
  • Boa noite Rodrigo:Montei a minha procedure da seguinte forma:

    DROP PROCEDURE CONHECIMENTOS_FILIALSERIECONHECINTERVALO
    GO

    CREATE PROCEDURE CONHECIMENTOS_FILIALSERIECONHECINTERVALO(
    @Filial_Origem INT,
    @Serie_Conhec VARCHAR(3),
    @Numero_Conhec INT
    )
    AS
    BEGIN
    SELECT * FROM tbConhecimentos WHERE Filial_Origem = @Filial_Origem 
    AND Serie_Conhec = @Serie_Conhec 
    AND Numero_Conhec between @NumeroCTeInicial AND @NumeroCTeFinal
    END
    GO

    porém, está dando um erro no momento de gerar:

    Must declare the scalar variable "@NumeroCTeInicial".

    Eu estou fazendo algo errado?

    sábado, 30 de maio de 2015 00:43
  • A mensagem está sendo emitida porque as variáveis @NumeroCTeInicial e @NumeroCTeFinal não foram declaradas no escopo da procedure, e nem são parâmetros da mesma. Tente desta forma:

    CREATE PROCEDURE CONHECIMENTOS_FILIALSERIECONHECINTERVALO
    	@Filial_Origem		int
    	, @Serie_Conhec		varchar(3)
    	, @NumeroCTeInicial	int
    	, @NumeroCTeFinal	int
    AS
    BEGIN
    
    	SET NOCOUNT ON;
    
        SELECT
    		*
    	FROM
    		tbConhecimentos
    	WHERE
    		Filial_Origem = @Filial_Origem 
    		AND Serie_Conhec = @Serie_Conhec 
    		AND Numero_Conhec between @NumeroCTeInicial AND @NumeroCTeFinal
    
    END
    GO
    Note que apenas reescrevi seu script modificando os parâmetros da procedure.

    Se precisar, envia sua pergunta novamente.



    sábado, 30 de maio de 2015 01:09
  • Obrigado Rodrigo, deu certo. Valeu
    sábado, 30 de maio de 2015 02:30