none
É possível fazer isso? RRS feed

  • Pergunta

  • Olá pessoal,

    Estou tentando fazer dois modelos de SQL, não sei se isso é possível. Se for, por favor me orientem a melhor forma.

    MODELO 01:

    DECLARE @pTipo INT
    SET @pTipo = :TIPO_I

    SELECT * FROM TABELA

    If (@pTipo < 3) Then
    Begin
       WHERE Tipo = @pTipo
    End

    ORDER BY Data, Nome

    MODELO 02:

    DECLARE @pTipo INT

    DECLARE @pParametro VARCHAR

    SET @pTipo = :TIPO_I
    SET @pParametro = ''

    If (@pTipo < 3) Then

    Begin

    @pParametro = ' Qualificador = ' + CAST(!pTipo AS CHAR(1))

    End

    Else

    If (@pTipo = 4) Then

    Begin

    QpParametro = ''

    End;

    SELECT * FROM TABELA

    WHERE @pParaemtro

    ORDER BY Data, Nome

    Tem como fazer isso?

    Grato,

    Ilano

    terça-feira, 3 de novembro de 2015 19:40

Respostas

  • Boa tarde,

    Não sei se entendi corretamente a sua questão, mas seguem as sugestões:

    SELECT * FROM TABELA
    WHERE
        @pTipo >= 3 OR
        Tipo = @pTipo
    ORDER BY Data, Nome

    SELECT * FROM TABELA
    WHERE
        @pTipo < 3 AND
        Qualificador = ' + CAST(@pTipo AS CHAR(1))
    ORDER BY Data, Nome

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 14:55
    terça-feira, 3 de novembro de 2015 20:08

  • Direto da MSDN
    sp_executesql

    DECLARE @IntVariable int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    
    /* Build the SQL string one time.*/
    SET @SQLString =
         N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID
           FROM AdventureWorks2012.HumanResources.Employee 
           WHERE BusinessEntityID = @BusinessEntityID';
    SET @ParmDefinition = N'@BusinessEntityID tinyint';
    /* Execute the string with the first parameter value. */
    SET @IntVariable = 197;
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @BusinessEntityID = @IntVariable;
    /* Execute the same string with the second parameter value. */
    SET @IntVariable = 109;
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @BusinessEntityID = @IntVariable;

    No seu exemplo 1, fica mais ou menos assim !

    DECLARE @pTipo INT;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    
    SET @pTipo = TIPO_I;
    
    If (@pTipo < 3)
    Begin
        SET @SQLString = N'SELECT * FROM TABELA WHERE Tipo = @pTipo ORDER BY Data, Nome';
    	SET @ParmDefinition = N'@pTipo2 int';
    END
    
    SET @IntVariable = TIPO_I
    
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @pTipo2 = @IntVariable;


    Flávio Farias "May the Force be with you" Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    terça-feira, 3 de novembro de 2015 20:18

Todas as Respostas

  • Boa tarde,

    Não sei se entendi corretamente a sua questão, mas seguem as sugestões:

    SELECT * FROM TABELA
    WHERE
        @pTipo >= 3 OR
        Tipo = @pTipo
    ORDER BY Data, Nome

    SELECT * FROM TABELA
    WHERE
        @pTipo < 3 AND
        Qualificador = ' + CAST(@pTipo AS CHAR(1))
    ORDER BY Data, Nome

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 14:55
    terça-feira, 3 de novembro de 2015 20:08

  • Direto da MSDN
    sp_executesql

    DECLARE @IntVariable int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    
    /* Build the SQL string one time.*/
    SET @SQLString =
         N'SELECT BusinessEntityID, NationalIDNumber, JobTitle, LoginID
           FROM AdventureWorks2012.HumanResources.Employee 
           WHERE BusinessEntityID = @BusinessEntityID';
    SET @ParmDefinition = N'@BusinessEntityID tinyint';
    /* Execute the string with the first parameter value. */
    SET @IntVariable = 197;
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @BusinessEntityID = @IntVariable;
    /* Execute the same string with the second parameter value. */
    SET @IntVariable = 109;
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @BusinessEntityID = @IntVariable;

    No seu exemplo 1, fica mais ou menos assim !

    DECLARE @pTipo INT;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    
    SET @pTipo = TIPO_I;
    
    If (@pTipo < 3)
    Begin
        SET @SQLString = N'SELECT * FROM TABELA WHERE Tipo = @pTipo ORDER BY Data, Nome';
    	SET @ParmDefinition = N'@pTipo2 int';
    END
    
    SET @IntVariable = TIPO_I
    
    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @pTipo2 = @IntVariable;


    Flávio Farias "May the Force be with you" Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"


    terça-feira, 3 de novembro de 2015 20:18