Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrovisk

Stored Procedure

Recommended Posts

Veja se você pode me tirar esta dúvida, como sempre SQL. A SP abaixo, que estou tentado criar, é para exibir os dados de uma página de consulta, a consulta esta abaixo tbm e eu gostaria de exibir os dados dela.

 

Ela deverá exibir informações, de acordo com os parâmetros informados pelo usuário, por exemplo:

 

Abaixo, em (), estão as variáveis, conforme no SQL.

 

Gostaria de utiliza IF, não sei se é o correto.

 

- Exibir todas as máquinas que estão licenciadas (@Licenciada) do departamento 35 (@CCusto).

 

 

 

Os parâmetros que estão na pagina são:

 

- Centro de Custo

 

- Licenciada

 

- Por Usuário

 

- Por Att ID Amadeus

 

- Nome da Máquina

 

- Por Tipo

 

 

 

Caso o usuário só selecione dois parâmetros acima, eu gostaria que as outras variáveis recebessem 0 (zero) ou outro valor que não desse erro na consulta e exibisse os dados dela. Eu não sei se os IFs estão nos seus devidos lugares, apenas gostaria que a consulta exibisse os dados.

 

Confira abaixo o que eu fiz.

 

 

 

--CREATE PROCEDURE [dbo].[sP_Rel_Maquina] AS

 

 

 

Declare

 

@NomeMaquina Char(10), --Passa o nome da maquina.

 

@Usuario Int(4), --Passo o ID do usuario da maquina.

 

@CCusto Int(4), -- Passa o ID do centro da custo da maquina.

 

@TipoMaquina Int(4), -- Passa o ID do tipo de maquina (Amadeus, Desktop etc)

 

@Licenciada Char(10), -- Sim para Licenciada e Nao para não licenciada.

 

@AttIDAmadeus Char(10) -- Passa o Att ID Amadeus da maquina.

 

 

 

--As

 

 

 

SELECT dbo.Maquina.Handle AS IDMaquina,

 

dbo.Maquina.NomeMaq,

 

dbo.Maquina.LicencaSoft,

 

dbo.Maquina.AttIDAmadeus,

 

dbo.Maquina.IdUsu,

 

dbo.Maquina.IdDep,

 

dbo.Maquina.IdTipoMaq,

 

dbo.Departamento.NomeDep,

 

dbo.Usuario.NomeUsu,

 

dbo.TipoMaquina.NomeTipoMaq

 

 

 

FROM dbo.Maquina

 

INNER JOIN dbo.Departamento ON dbo.Maquina.IdDep = dbo.Departamento.Handle

 

INNER JOIN dbo.Usuario ON dbo.Maquina.IdUsu = dbo.Usuario.Handle

 

INNER JOIN dbo.TipoMaquina ON dbo.Maquina.IdTipoMaq = dbo.TipoMaquina.Handle

 

 

 

WHERE (dbo.Maquina.NomeMaq = @NomeMaquina)

 

 

 

--Se o valor passado for igual a zero, nao deve trazer nada para nao dar erro na pagina.

 

If @NomeMaquina = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

If @Usuario = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

If @CCusto = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

If @TipoMaquina = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

If @Licenciada = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

If @AttIDAmadeus = ''

 

Begin

 

Select NomeMaq From Maquina

 

End

 

 

 

GO

 

 

Muito obrigado a quem pode ajudar,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou construindo uma página, em ASP, de consulta por máquinas cadastradas. Esta página tem alguns parametros que o usuário pode selecionar ou não, como no exemplo abaixo:

 

* Quero ver TODAS as máquinas do Centro de Custo Call Center onde o TIPO seja Amadeus.

 

Nesta página teem os seguintes paramentros:

 

- Centro de Custo

 

- Licenciada

 

- Por Usuário

 

- Por Att ID Amadeus

 

- Nome da Máquina

 

- Por Tipo

 

Já tenho a consulta criada, e quero que a SP ao ser executa Exec dbo.SP_Rel_Maquina @NomeMaquina=Ald001, dependendo do que o usuário selecionar, NÃO SEI SE PRECISA UTILIZAR O IF, pois não tenho conhecimento de SP. Confira a consulta feita abaixo

 

 

CREATE PROCEDURE dbo.SP_Rel_Maquina2 AS

 

@NomeMaquina Char(10), --Passa o nome da maquina.

@Usuario Int(4), --Passo o ID do usuario da maquina.

@CCusto Int(4), -- Passa o ID do centro da custo da maquina.

@TipoMaquina Int(4), -- Passa o ID do tipo de maquina (Amadeus, Desktop etc)

@Licenciada Char(10), -- Sim para Licenciada e Nao para não licenciada.

@AttIDAmadeus Char(10) -- Passa o Att ID Amadeus da maquina.

 

SELECT dbo.Maquina.Handle AS IDMaquina,

dbo.Maquina.NomeMaq,

dbo.Maquina.LicencaSoft,

dbo.Maquina.AttIDAmadeus,

dbo.Maquina.IdUsu,

dbo.Maquina.IdDep,

dbo.Maquina.IdTipoMaq,

dbo.Departamento.NomeDep,

dbo.Usuario.NomeUsu,

dbo.TipoMaquina.NomeTipoMaq

FROM dbo.Maquina

INNER JOIN dbo.Departamento ON dbo.Maquina.IdDep = dbo.Departamento.Handle

INNER JOIN dbo.Usuario ON dbo.Maquina.IdUsu = dbo.Usuario.Handle

INNER JOIN dbo.TipoMaquina ON dbo.Maquina.IdTipoMaq = dbo.TipoMaquina.Handle

WHERE (dbo.Maquina.NomeMaq = 'Ald001')

AND (dbo.Maquina.LicencaSoft = 'Sim')

AND (dbo.Maquina.AttIDAmadeus = '12345678')

AND (dbo.Maquina.IdUsu = 115)

AND (dbo.Maquina.IdDep = 2)

AND (dbo.Maquina.IdTipoMaq = 5)

 

Se os ANS's acima não tiverem nada, não desse erro e exibisse apenas o que foi passaso pelos paramentros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se assim funciona, se ele passar o parametro ele filtra, se não passar, ele ignora.. lembrando q valores nulos não são considerados. Outra coisa... as variáveis que você não for passar, você manda como nulo (NULL sem aspas):

 

CREATE PROCEDURE dbo.SP_Rel_Maquina2 AS@NomeMaquina Varchar(10), --Passa o nome da maquina.@Usuario Int(4), --Passo o ID do usuario da maquina.@CCusto Int(4), -- Passa o ID do centro da custo da maquina.@TipoMaquina Int(4), -- Passa o ID do tipo de maquina (Amadeus, Desktop etc)@Licenciada Varchar(10), -- Sim para Licenciada e Nao para não licenciada.@AttIDAmadeus Varchar(10) -- Passa o Att ID Amadeus da maquina.SELECT m.Handle AS IDMaquina, m.NomeMaq, m.LicencaSoft, m.AttIDAmadeus, m.IdUsu, m.IdDep, m.IdTipoMaq, d.NomeDep, u.NomeUsu, t.NomeTipoMaqFROM dbo.Maquina mINNER JOIN dbo.Departamento d ON m.IdDep = d.Handle INNER JOIN dbo.Usuario u ON m.IdUsu = u.Handle INNER JOIN dbo.TipoMaquina t ON m.IdTipoMaq = t.Handle/* dentro dos parentes da função COALESCE você vai ter q colar a variavel mandada na PROCEDURE.. ou seja no lugar do SIM você vai colocar @CodAlgumaCoisa, beleza.. fiz um exemplo no primeiro pra você entender */WHERE m.NomeMaq = COALESCE(@NomeMaquina, m.NomeMaq)AND m.LicencaSoft = COALESCE('Sim', m.LicencaSoft) AND m.AttIDAmadeus = COALESCE('12345678', m.AttIDAmadeus) AND m.IdUsu = COALESCE('4', m.IdUsu) AND m.IdDep = COALESCE(2, m.IdDep) AND m.IdTipoMaq = (5, m.IdTipoMaq)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Ska Ska,

 

Por favor, veja abaxo como ficou segundo sua ajuda. Quando vou executar Exec @NomeMaquina = 'ald001', @Licenciada = Null, @AttIDAmadeus = Null, @Usuario = Null, @CCusto = Null, @TipoMaquina = Null, gera a mensagem abaixo:

 

Server: Msg 137, Level 15, State 2, Line 1

Must declare the variable '@NomeMaquina'.

 

O que devo fazer para executar esta SP de uma pagina em ASP corretamente, pois se no Query Analyzer ele faz isso, então deverá na página tbm fazer.

 

CREATE PROCEDURE dbo.SP_Rel_Maquina2 AS

 

Declare @NomeMaquina Char(10)

Declare @Licenciada Char(10)

Declare @AttIDAmadeus Char(10)

Declare @Usuario Char(10)

Declare @CCusto Char(10)

Declare @TipoMaquina Char(10)

 

SELECT m.Handle AS IDMaquina, m.NomeMaq, m.LicencaSoft, m.AttIDAmadeus, m.IdUsu,

m.IdDep, m.IdTipoMaq, d.NomeDep, u.NomeUsu, t.NomeTipoMaq

FROM dbo.Maquina m

INNER JOIN dbo.Departamento d ON m.IdDep = d.Handle

INNER JOIN dbo.Usuario u ON m.IdUsu = u.Handle

INNER JOIN dbo.TipoMaquina t ON m.IdTipoMaq = t.Handle

/* dentro dos parentes da função COALESCE você vai ter q colar a variavel mandada na PROCEDURE..

ou seja no lugar do SIM você vai colocar @CodAlgumaCoisa, beleza.. fiz um exemplo no primeiro pra você entender */

WHERE

m.NomeMaq = COALESCE(@NomeMaquina, m.NomeMaq)

AND m.LicencaSoft = COALESCE(@Licenciada, m.LicencaSoft)

AND m.AttIDAmadeus = COALESCE(@AttIDAmadeus, m.AttIDAmadeus)

AND m.IdUsu = COALESCE(@Usuario, m.IdUsu)

AND m.IdDep = COALESCE(@CCusto, m.IdDep)

AND m.IdTipoMaq = COALESCE(@TipoMaquina, m.IdTipoMaq)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Ska Ska,

 

Por favor, veja abaxo como ficou segundo sua ajuda. Quando vou executar Exec @NomeMaquina = 'ald001', @Licenciada = Null, @AttIDAmadeus = Null, @Usuario = Null, @CCusto = Null, @TipoMaquina = Null, gera a mensagem abaixo:

 

Server: Msg 137, Level 15, State 2, Line 1

Must declare the variable '@NomeMaquina'.

 

O que devo fazer para executar esta SP de uma pagina em ASP corretamente, pois se no Query Analyzer ele faz isso, então deverá na página tbm fazer.

 

CREATE PROCEDURE dbo.SP_Rel_Maquina2 AS

 

Declare @NomeMaquina Char(10)

Declare @Licenciada Char(10)

Declare @AttIDAmadeus Char(10)

Declare @Usuario Char(10)

Declare @CCusto Char(10)

Declare @TipoMaquina Char(10)

 

SELECT m.Handle AS IDMaquina, m.NomeMaq, m.LicencaSoft, m.AttIDAmadeus, m.IdUsu,

m.IdDep, m.IdTipoMaq, d.NomeDep, u.NomeUsu, t.NomeTipoMaq

FROM dbo.Maquina m

INNER JOIN dbo.Departamento d ON m.IdDep = d.Handle

INNER JOIN dbo.Usuario u ON m.IdUsu = u.Handle

INNER JOIN dbo.TipoMaquina t ON m.IdTipoMaq = t.Handle

/* dentro dos parentes da função COALESCE você vai ter q colar a variavel mandada na PROCEDURE..

ou seja no lugar do SIM você vai colocar @CodAlgumaCoisa, beleza.. fiz um exemplo no primeiro pra você entender */

WHERE

m.NomeMaq = COALESCE(@NomeMaquina, m.NomeMaq)

AND m.LicencaSoft = COALESCE(@Licenciada, m.LicencaSoft)

AND m.AttIDAmadeus = COALESCE(@AttIDAmadeus, m.AttIDAmadeus)

AND m.IdUsu = COALESCE(@Usuario, m.IdUsu)

AND m.IdDep = COALESCE(@CCusto, m.IdDep)

AND m.IdTipoMaq = COALESCE(@TipoMaquina, m.IdTipoMaq)

Compartilhar este post


Link para o post
Compartilhar em outros sites

sql = "Exec FALTOU_NOME_DA_PROCEDURE @NomeMaquina = 'ald001', @Licenciada = Null, @AttIDAmadeus = Null, @Usuario = Null, @CCusto = Null, @TipoMaquina = Null"

set rs = conexao.execute(sql)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ska_Ska,

 

Coloquei como você sugeriu, mas agora gera este:

 

Server: Msg 8146, Level 16, State 2, Procedure SP_Rel_Maquina2, Line 0

Procedure SP_Rel_Maquina2 has no parameters and arguments were supplied.

 

Exec SP_Rel_Maquina2 @NomeMaquina = 'ald001', @Licenciada = Null, @AttIDAmadeus = Null, @Usuario = Null, @CCusto = Null, @TipoMaquina = Null

 

Lembrando que estou testando no Query Analyzer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ska_Ska,

 

Coloquei como você sugeriu, mas agora gera este:

 

Server: Msg 8146, Level 16, State 2, Procedure SP_Rel_Maquina2, Line 0

Procedure SP_Rel_Maquina2 has no parameters and arguments were supplied.

 

Exec SP_Rel_Maquina2 @NomeMaquina = 'ald001', @Licenciada = Null, @AttIDAmadeus = Null, @Usuario = Null, @CCusto = Null, @TipoMaquina = Null

 

Lembrando que estou testando no Query Analyzer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.