none
Duvida procedure RRS feed

  • Pergunta

  • Olá pessoal,

    Preciso de uma ajuda, caso seja possivel fazer o que eu pretendo.

    No sistema tem uma procedure, onde eu precisava fazer um where de determinado campo, porem

    sem passar parametros nessa procedure, na imagem abaixo vou tentar explicar melhor:

    Eu precisava saber todos os nomes onde os campos ULTIMOATO e ULTIMARECEPCAO, é igual a null, porem

    a procedure so funciona se eu passar o parametro como mostrado acima.

    Como eu faria para listar todos os registros onde os campos ULTIMOATO e ULTIMARECEPCAO é igual a null?

    Existe alguma forma de fazer isso ?

    quarta-feira, 11 de setembro de 2013 18:31

Todas as Respostas

  • Felipe,

    Tente utilizando na sua condição where:

    ULTIMOATO IS NULL AND ULTIMARECEPCAO  IS NULL

    ou

    ISNULL(ULTIMOATO, '') = '' AND ISNULL(ULTIMARECEPCAO, '') = ''


    Ricardo Minoru Makiyama


    quarta-feira, 11 de setembro de 2013 20:13
  • Deleted
    quarta-feira, 11 de setembro de 2013 23:57
  • Desculpe, mas sou novo no SQL,

    como ficaria para eu dar um select na PR, pois tentei e nao aceita

    eu preciso fazer com select + where.

    algo como select Pr_ e depois o where

    • Editado Felipe_Senna1 quinta-feira, 12 de setembro de 2013 11:10 acres
    quinta-feira, 12 de setembro de 2013 11:07
  • Deleted
    quinta-feira, 12 de setembro de 2013 12:03
  • Felipe,

    Você pode especificar seu parâmetro como opcional também, assim não precisará informá-lo na sua chamada:

    ALTER PROCEDURE [dbo].[pr_PesquisarNomeSelecionarContraditorio]

    .. Outros parametros

    @ULTIMOATO VARCHAR(100) = NULL,

    @ULTIMARECEPCAO VARCHAR(100)=NULL,
    AS
    BEGIN

    .. NO SEU WHERE FICARIA ALGO ASSIM:

    WHERE (ISNULL(@ULTIMOATO, '') = '' OR ULTIMOATO  = @ULTIMOATO)

    AND (ISNULL(@ULTIMARECEPCAO , '') = '' OR ULTIMARECEPCAO = @ULTIMARECEPCAO )

    END


    Ricardo Minoru Makiyama



    quinta-feira, 12 de setembro de 2013 12:05
  • No caso a procedure é essa:

    eu preciso fazer um select na procedure para pegar aqueles campos, 

    USE [WebRI]
    GO
    /****** Object:  StoredProcedure [dbo].[pr_PesquisarNomesSelecionarContraditorio]    Script Date: 12/09/2013 09:38:28 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 05/07/2013 20:08:02 ******/

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 12/04/2013 13:39:16 ******/

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 07/02/2013 11:44:14 ******/

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 17/12/2012 09:24:16 ******/

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 26/09/2012 12:32:02 ******/

    /****** Object:  Stored Procedure dbo.pr_PesquisarNomesSelecionarContraditorio    Script Date: 28/06/2012 19:17:43 ******/

    ALTER Procedure [dbo].[pr_PesquisarNomesSelecionarContraditorio](
    @PK_Pessoa Int = Null,
    @Nome VarChar(300) = Null,
    @Documento VarChar(18) = Null,
    @Documento2 VarChar(18) = Null,
    @PK_FlagRecepcao Int = Null,
    @PK_Recepcao Int = Null)
    As Begin

    --Declare @PK_Pessoa Int
    --Declare @Nome VarChar(200)
    --Declare @Documento VarChar(18)
    --Declare @PK_FlagRecepcao Int
    --Declare @PK_Recepcao Int
    --
    --Set @PK_Pessoa = null
    --Set @Nome = 'rodolpho tuffic'
    --Set @Documento = ''
    --Set @PK_FlagRecepcao = null
    --Set @PK_Recepcao = null

    Declare @DiasPermContradAposRegistro Int
    Declare @DiasPermContradAposValidade Int
    Declare @PesquisarDocumentoNumeroMaximoDigitos Int

    Select @DiasPermContradAposRegistro = DiasPermContradAposRegistro,
      @DiasPermContradAposValidade = DiasPermContradAposValidade,
    @PesquisarDocumentoNumeroMaximoDigitos = PesquisarDocumentoNumeroMaximoDigitos
    From tblWRIParametros

    Declare @Pessoas Table(PK_Pessoa Int)

    Set @PK_Recepcao = Case When @PK_Recepcao=0 Then Null Else @PK_Recepcao End
    Set @PK_Pessoa = Case When @PK_Pessoa=0 Then Null Else @PK_Pessoa End

    If @PK_Pessoa Is Not Null
    Begin
    Insert @Pessoas
    Values (@PK_Pessoa)
    End
    Else Begin

    If (@Documento<>'')
    Begin
    If (@PesquisarDocumentoNumeroMaximoDigitos>0)
    Begin
    If (Len(@Documento)>@PesquisarDocumentoNumeroMaximoDigitos)
    Set @Documento = Substring(LTRim(RTrim(@Documento)),1,@PesquisarDocumentoNumeroMaximoDigitos)

    Insert @Pessoas
    Select tblWRIDocumentos.FK_tblWRIPessoas_Id
    From tblWRIDocumentos
    Where tblWRIDocumentos.Numero_Documento LIKE RTrim(LTrim(@Documento)) + '%'
    And Not Exists
    (
    Select *
    From @Pessoas B
    Where B.PK_Pessoa=tblWRIDocumentos.FK_tblWRIPessoas_Id
    )
    End
    Else Begin
    Insert @Pessoas
    Select tblWRIDocumentos.FK_tblWRIPessoas_Id
    From tblWRIDocumentos
    Where tblWRIDocumentos.Numero_Documento=@Documento
    And Not Exists
    (
    Select *
    From @Pessoas B
    Where B.PK_Pessoa=tblWRIDocumentos.FK_tblWRIPessoas_Id
    )
    End
    End


    If (@Documento2<>'')
    Begin
    If (@PesquisarDocumentoNumeroMaximoDigitos>0)
    Begin
    If (Len(@Documento2)>@PesquisarDocumentoNumeroMaximoDigitos)
    Set @Documento2 = Substring(LTRim(RTrim(@Documento2)),1,@PesquisarDocumentoNumeroMaximoDigitos)

    Insert @Pessoas
    Select tblWRIDocumentos.FK_tblWRIPessoas_Id
    From tblWRIDocumentos
    Where tblWRIDocumentos.Numero_Documento LIKE RTrim(LTrim(@Documento2)) + '%'
    And Not Exists
    (
    Select *
    From @Pessoas B
    Where B.PK_Pessoa=tblWRIDocumentos.FK_tblWRIPessoas_Id
    )
    End
    Else Begin
    Insert @Pessoas
    Select tblWRIDocumentos.FK_tblWRIPessoas_Id
    From tblWRIDocumentos
    Where tblWRIDocumentos.Numero_Documento=@Documento2
    And Not Exists
    (
    Select *
    From @Pessoas B
    Where B.PK_Pessoa=tblWRIDocumentos.FK_tblWRIPessoas_Id
    )
    End
    End


    If (@Nome<>'')
    Begin
    Insert @Pessoas
    Select A.PK_Pessoa
    From dbo.fn_PesquisarPessoas(@Nome,1,1) A
    Where Not Exists
    (
    Select *
    From @Pessoas B
    Where B.PK_Pessoa=A.PK_Pessoa
    )
    End
    End

    Declare @Tabela Table(
    PK_Pessoa Int,
    PK_Ato Int,
    PK_FlagRecepcao Int,
    PK_Recepcao Int,
    PK_SeqTitulo Int,
    Alterar Bit Default 1)

    Set Ansi_Nulls Off

    Insert @Tabela
    Select A.PK_Pessoa,
    C.PK_Ato,
    Case When IsNull(E.PK_FlagRecepcao,0)>IsNull(C.PK_FlagRecepcao,0) Then E.PK_FlagRecepcao Else C.PK_FlagRecepcao End,
    Case When IsNull(E.PK_Recepcao,0)>IsNull(C.PK_Recepcao,0) Then E.PK_Recepcao Else C.PK_Recepcao End,
    Case When IsNull(E.PK_SeqTitulo,0)>IsNull(C.PK_SeqTitulo,0) Then E.PK_SeqTitulo Else C.PK_SeqTitulo End,
    Case When C.PK_Ato Is Not Null Then 0 Else 1 End
    From @Pessoas A
    Left Join
    (
    Select B.PK_Pessoa,
    Max(tblWRIAtosNegocios.FK_tblWRIAtos_Id) As PK_Ato,
    Max(tblWRIAtosTitulos.FK_tblWRIRecepcaoFlagRecepcao) As PK_FlagRecepcao,
    Max(tblWRIAtosTitulos.FK_tblWRIRecepcaoRecepcao) As PK_Recepcao,
    Max(tblWRIAtosTitulos.PK_SeqTitulo) As PK_SeqTitulo,
    0 As Tipo
    From @Pessoas B
    Inner Join tblWRIAtosParticipantes
    On tblWRIAtosParticipantes.FK_tblWRIPessoas_Id=B.PK_Pessoa
    Inner Join tblWRIAtosNegocios
    On tblWRIAtosNegocios.PK_Id=tblWRIAtosParticipantes.FK_tblWRIAtosNegocios_Id
    Inner Join tblWRIAtos
    On tblWRIAtos.PK_Id=tblWRIAtosNegocios.FK_tblWRIAtos_Id
    Left Join tblWRIAtosTitulos
    On tblWRIAtosTitulos.FK_tblWRIAtos_Id=tblWRIAtos.PK_Id
    Group By
    B.PK_Pessoa
    ) C
    On C.PK_Pessoa = A.PK_Pessoa
    Left Join
    (
    Select D.PK_Pessoa,
    Max(tblWRITitulosParticipantes.FK_tblWRIRecepcaoFlagRecepcao) As PK_FlagRecepcao,
    Max(tblWRITitulosParticipantes.FK_tblWRIRecepcaoRecepcao) As PK_Recepcao,
    Max(tblWRITitulosParticipantes.PK_SeqTitulo) As PK_SeqTitulo
    From @Pessoas D
    Inner Join tblWRITitulosParticipantes
    On tblWRITitulosParticipantes.FK_tblWRIPessoas_Id=D.PK_Pessoa
    Where (tblWRITitulosParticipantes.FK_tblWRIRecepcaoFlagRecepcao <> @PK_FlagRecepcao
    Or tblWRITitulosParticipantes.FK_tblWRIRecepcaoRecepcao <> @PK_Recepcao)
    Group By
    D.PK_Pessoa
    ) E
    On E.PK_Pessoa = A.PK_Pessoa

    Update @Tabela
    Set Alterar = dbo.fn_RegraContraditorio(
    GetDate(),
    tblWRIRecepcao.DtExpiraPrn,
    tblWRIRecepcao.DtCancelamento,
    tblWRITitulos.DataUltimoRegistro,
    tblWRIRecepcao.FlagRegParcial,
    tblWRIRecepcao.DtExpiraReentrada,
    @DiasPermContradAposRegistro,
    @DiasPermContradAposValidade)
    From @Tabela A
    Inner Join tblWRITitulos
    On tblWRITitulos.FK_tblWRIRecepcaoFlagRecepcao=A.PK_FlagRecepcao
    And tblWRITitulos.FK_tblWRIRecepcaoRecepcao=A.PK_Recepcao
    And tblWRITitulos.PK_SeqTitulo=A.PK_SeqTitulo
    Inner Join tblWRIRecepcao
    On tblWRIRecepcao.PK_FlagRecepcao=tblWRITitulos.FK_tblWRIRecepcaoFlagRecepcao
    And tblWRIRecepcao.PK_Recepcao=tblWRITitulos.FK_tblWRIRecepcaoRecepcao
    Where A.Alterar <> 0
    And (tblWRITitulos.FK_tblWRIRecepcaoFlagRecepcao <> @PK_FlagRecepcao
    Or tblWRITitulos.FK_tblWRIRecepcaoRecepcao <> @PK_Recepcao)


    Select vw_Pessoas.PK_Pessoa,
    vw_Pessoas.Nome,
    vw_Pessoas.PessoaFull,
    vw_Atos.PK_Ato,
    vw_Atos.AtoFull As UltimoAto,
    Case When A.PK_Recepcao Is Null Then '' 
    Else RTrim(tblWRITipoPrenotacao.TipoPrenotacao) + ' ' + Cast(A.PK_Recepcao As VarChar(8)) + '/' + Cast(A.PK_SeqTitulo As VarChar(3)) + ' (' + Convert(VarChar(10),tblWRIRecepcao.DtRecep,103) + ')' 
    End As UltimaRecepcao,
    A.PK_FlagRecepcao,
    A.PK_Recepcao,
    A.PK_SeqTitulo,
    A.Alterar,
    vw_Pessoas.PessoaEnderecoFull
    From @Tabela A
    Inner Join vw_Pessoas
    On vw_Pessoas.PK_Pessoa = A.PK_Pessoa
    Left Join vw_Atos 
    On vw_Atos.PK_Ato = A.PK_Ato
    Left Join tblWRIRecepcao
    On tblWRIRecepcao.PK_FlagRecepcao=A.PK_FlagRecepcao
    And tblWRIRecepcao.PK_Recepcao=A.PK_Recepcao
    Left Join tblWRITipoPrenotacao
    On tblWRITipoPrenotacao.PK_Id=tblWRIRecepcao.TipoPrenotacao
    Order By
    vw_Pessoas.Nome,
    vw_Pessoas.PessoaFullDocumento,
    vw_Atos.PK_Ato

    /*
    Select Max(PK_Id),
    Nome,
    Count(*)
    From tblWRIPessoas
    Group By
    Nome
    Having Count(*)>4
    Order By 
    Nome
    */
    Sair:
    End





    quinta-feira, 12 de setembro de 2013 12:39
  • pelo que entendi nao tem como fazer o que eu preciso entao, 

    eu preciso do select nao tem como?

    Se tiver como eu fazer um select, me passe por favor, 

    quinta-feira, 12 de setembro de 2013 12:41
  • Deleted
    sexta-feira, 13 de setembro de 2013 01:11
  • Muito obrigado pela ajuda,

    Tentei rodar mas deu erro no from

    from @Tabela A

    Msg 156, Level 15, State 1, Line 13
    Incorrect syntax near the keyword 'from'.

    Quanto ao null, sim voce tem razão na aplicação fica em branco, 

    O que eu preciso com isso é listar todos os nomes que estao em branco ou seja nao tem atos nem recepcao, e estao sem referencia no banco.

    sexta-feira, 13 de setembro de 2013 15:15
  • Felipe,

    Verifique que deve existir no exemplo do José uma vírgula declarada antes do From.

           End as UltimaRecepcao,
           ...
      from @Tabela A

    Remova vírgula.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sábado, 14 de setembro de 2013 16:53
  • Junior Galvao,

    Copiei o comando novamente, estava com virgula, porem deu o mesmo erro.

    abs

    segunda-feira, 16 de setembro de 2013 16:19
  • Deleted
    segunda-feira, 16 de setembro de 2013 19:34
  • Ok, jose

    Fico no aguardo, caso voce ainda possa me ajudar.

    terça-feira, 17 de setembro de 2013 14:15