Usuário com melhor resposta
IF com falha em uma procedure sql server 2005

Pergunta
-
ALTER PROCEDURE PROC_LISTCARTOES
@CODCLI VARCHAR(5),@STATUS VARCHAR(2),@NOME VARCHAR(30)
AS
SELECT U.CODCRT AS CARTAO, DATSTA as DATA_STATUS, U.CPF,
U.NOMUSU AS NOME, U.NUMDEP AS TD, S.DESTA AS STATUS
FROM USUARIOVA U
INNER JOIN STATUS S ON S.STA = U.STA
WHERE U.CODCLI = @CODCLI
IF @NOME IS NOT NULL
AND U.NOMUSU LIKE ''+@NOME+'%'
IF @STATUS IS NOT NULL
AND U.STA =@STATUS
ORDER BY LTRIM(U.NOMUSU)Pessoal bom dia,
estou tendo problemas para montar essa procedure, hoje ela me acusa o erro abaixo
Msg 156, Level 15, State 1, Procedure PROC_LISTCARTOES, Line 18
Incorrect syntax near the keyword 'ORDER'.So que sei que o erro esta nos IF, como faço para que ela funcione dessa forma?
Respostas
-
Bom dia,
Acho que você conseguira obter o resultado desejado com a clausula Where da seguinte forma:
WHERE U.CODCLI = @CODCLI and (@NOME IS NULL or U.NOMUSU LIKE @NOME + '%') and (@STATUS IS NULL or U.STA = @STATUS)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta DouglasAmFm quinta-feira, 29 de agosto de 2013 14:15
-
Olá Douglas,
para este caso terás que utilizar sql dinâmico.]
ALTER PROCEDURE PROC_LISTCARTOES
@CODCLI VARCHAR(5),@STATUS VARCHAR(2),@NOME VARCHAR(30)
AS
declare @query nvarchar(max)
set @query = '
SELECT U.CODCRT AS CARTAO, DATSTA as DATA_STATUS, U.CPF,
U.NOMUSU AS NOME, U.NUMDEP AS TD, S.DESTA AS STATUS
FROM USUARIOVA U
INNER JOIN STATUS S ON S.STA = U.STA
WHERE U.CODCLI = ''' + @CODCLI + ''''
IF @NOME IS NOT NULL
begin
set @query = @query + ' AND U.NOMUSU LIKE '''+ @NOME +'%'''
end
IF @STATUS IS NOT NULL
begin
set @query = @query + ' AND U.STA = ''' + @STATUS + ''''
end
set @query = @query + ' ORDER BY LTRIM(U.NOMUSU)'
exec sp_executesql @query"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto Galvão
MCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012
Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão quinta-feira, 29 de agosto de 2013 13:51
- Editado Roberto Galvão quinta-feira, 29 de agosto de 2013 13:52
- Marcado como Resposta DouglasAmFm quinta-feira, 29 de agosto de 2013 13:52
Todas as Respostas
-
Olá Douglas,
para este caso terás que utilizar sql dinâmico.]
ALTER PROCEDURE PROC_LISTCARTOES
@CODCLI VARCHAR(5),@STATUS VARCHAR(2),@NOME VARCHAR(30)
AS
declare @query nvarchar(max)
set @query = '
SELECT U.CODCRT AS CARTAO, DATSTA as DATA_STATUS, U.CPF,
U.NOMUSU AS NOME, U.NUMDEP AS TD, S.DESTA AS STATUS
FROM USUARIOVA U
INNER JOIN STATUS S ON S.STA = U.STA
WHERE U.CODCLI = ''' + @CODCLI + ''''
IF @NOME IS NOT NULL
begin
set @query = @query + ' AND U.NOMUSU LIKE '''+ @NOME +'%'''
end
IF @STATUS IS NOT NULL
begin
set @query = @query + ' AND U.STA = ''' + @STATUS + ''''
end
set @query = @query + ' ORDER BY LTRIM(U.NOMUSU)'
exec sp_executesql @query"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto Galvão
MCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012
Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão quinta-feira, 29 de agosto de 2013 13:51
- Editado Roberto Galvão quinta-feira, 29 de agosto de 2013 13:52
- Marcado como Resposta DouglasAmFm quinta-feira, 29 de agosto de 2013 13:52
-
Bom dia,
Acho que você conseguira obter o resultado desejado com a clausula Where da seguinte forma:
WHERE U.CODCLI = @CODCLI and (@NOME IS NULL or U.NOMUSU LIKE @NOME + '%') and (@STATUS IS NULL or U.STA = @STATUS)
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta DouglasAmFm quinta-feira, 29 de agosto de 2013 14:15
-
-