none
Dúvidas em stored procedure RRS feed

  • Pergunta

  •  

    tenho a seguinte stored procedure:

     

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1)

    )

     

    AS

     

    SET NOCOUNT ON

     

    SELECT

    CASE WHEN @CodTipo LIKE 'A' THEN 'Tipo de Cliente 1'

    WHEN @CodTipo LIKE 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo LIKE 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE

    WHERE....

     

     

    minha dúvida é: na claúsula WHERE, tenho q fazer uma condição para se o usuário entrar com um código ele verifique se o código existe cadastrado na tabela, ou se ele não digitar nenhum, ele não verificar a claúsula WHERE fazendo nesse exemplo acima exibir "Outros Clientes" em todos os registros.

    quinta-feira, 14 de fevereiro de 2008 14:01

Respostas

  • Fernando, segue um exemplo de como você pode fazer essa query:

     

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1) NULL

    )

    AS

    SET NOCOUNT ON

    DECLARE @Sql nvarchar(4000)

    IF (@CodTipo IS NULL)

    BEGIN

    SET @Sql =

    'SELECT

    CASE WHEN @CodTipo LIKE 'A' THEN 'Tipo de Cliente 1'

    WHEN @CodTipo LIKE 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo LIKE 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE'

    END

    ELSE

    BEGIN

    SET @Sql =

    'SELECT

    CASE WHEN @CodTipo LIKE 'A' THEN 'Tipo de Cliente 1'

    WHEN @CodTipo LIKE 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo LIKE 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE

    WHERE ....'

    END

    EXEC sp_executesql (@Sql)

     

     

     

    Abraços,

    quinta-feira, 14 de fevereiro de 2008 14:20

Todas as Respostas

  • Fernando, segue um exemplo de como você pode fazer essa query:

     

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1) NULL

    )

    AS

    SET NOCOUNT ON

    DECLARE @Sql nvarchar(4000)

    IF (@CodTipo IS NULL)

    BEGIN

    SET @Sql =

    'SELECT

    CASE WHEN @CodTipo LIKE 'A' THEN 'Tipo de Cliente 1'

    WHEN @CodTipo LIKE 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo LIKE 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE'

    END

    ELSE

    BEGIN

    SET @Sql =

    'SELECT

    CASE WHEN @CodTipo LIKE 'A' THEN 'Tipo de Cliente 1'

    WHEN @CodTipo LIKE 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo LIKE 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE

    WHERE ....'

    END

    EXEC sp_executesql (@Sql)

     

     

     

    Abraços,

    quinta-feira, 14 de fevereiro de 2008 14:20
  • Fernando,

     

    Desculpe, mas não entendi bem sua dúvida. O código a ser informado pelo usuário e verificado é o @codTipo (que é o único parâmetro da sua SP)?

     

    Se for, você já está comparando o valor dele (um conjunto de valores pré-determinados na verdade) no CASE, então porque precisaria fazer o FROM? Isso aqui não resolveria?

     

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1)

    )

     

    AS

    BEGIN

     

    SET NOCOUNT ON

     

    SELECT

    CASE WHEN @CodTipo = 'A' THEN 'Tipo de Cliente 1' -- por ser char(1), o like não é necessário

    WHEN @CodTipo = 'B' THEN 'Tipo de Cliente 2'

    WHEN @CodTipo = 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

     

    END

     

     

     

    Caso vc tenha que verificar o código na tabela, com o mesmo nome ou referenciando outra coluna (o que parece ser o caso):

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1)

    )

     

    AS

     

    SET NOCOUNT ON

     

    IF (@codTipo is NULL)

    SELECT 'Outros Clientes' AS TIPO

    ELSE

    SELECT

    CASE WHEN codXXX = 'A' THEN 'Tipo de Cliente 1' -- ou @codTipo, tanto faz

    WHEN codXXX = 'B' THEN 'Tipo de Cliente 2'

    WHEN codXXX = 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE

    WHERE

              codXXX = @codTipo

     

     

     

    Caso o código a ser utilizado pelo usuário seja outro que não o @codTipo, vc teria que informá-lo como parâmetro:

     

    Code Snippet

    CREATE PROCEDURE stp_exemplo_sel01

    (

    @CodTipo CHAR(1), @codUsuario int

    )

     

    AS

     

    SET NOCOUNT ON

     

    IF (@codUsuario is NULL)

    SELECT 'Outros Clientes' AS TIPO

    ELSE

    SELECT

    CASE WHEN @codTipo = 'A' THEN 'Tipo de Cliente 1'

    WHEN @codTipo = 'B' THEN 'Tipo de Cliente 2'

    WHEN @codTipo = 'C' THEN 'Tipo de Cliente 3'

    ELSE 'Outros Clientes'

    END AS TIPO

    FROM

    TBL_CLIENTE

    WHERE

              codUsuario = @codUsuario

     

     

     

     

     

    quinta-feira, 14 de fevereiro de 2008 17:37