Usuário com melhor resposta
Procedure Dinâmica diferente

Pergunta
-
Pessoal,
É o seguinte preciso fazer uma proc. que selecione os idEmpresas passados como parametros, exemplo: "usp_minhaproc_select_empresa 1,2,3...N",mais não sei como fazer para que aceite os parametros, pois estou criando minha procedure da seguinte forma:
usp_minhaproc_select_empresa @idEmpresa int
asselect * from tb_testeEmpresa
where idEmpresa in (@idEmpresa)
Não está funcionando, alguem poderia me ajudar?
Obrigado
Respostas
-
Você pode criar um função que tera objetivo receber um valor delimitado (1,2,3,4,5,6) e fazer a sua consulta usando de JOIN com a mesma, exemplo:
CREATE FUNCTION SplitID ( @IDString VARCHAR(1000) ) RETURNS @IDs TABLE (ID INT) AS BEGIN DECLARE @Position int WHILE len(@IDString) > 0 BEGIN SET @Position = charindex(',', @IDString) IF @Position > 0 begiN INSERT @IDs SELECT CONVERT(INT, LEFT(@IDString, @Position - 1)) SET @IDString = RIGHT(@IDString, LEN(@IDString) - @Position) END ELSE BEGIN INSERT @IDs SELECT CONVERT(INT, @IDString) SET @IDString = '' END END RETURN END
SQL
DECLARE @EmpresaIDs VARCHAR(2000) SET @EmpresaIDs = '1, 2, 3, 4, 5' SELECT E.* FROM Empresas E INNER JOIN SplitIDString(@EmpresaIDs) I ON E.Empresa = I.ID
Referencia:
http://p2p.wrox.com/sql-server-2000/37871-passing-clause-stored-procedure.html
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Editado Vitor Mendes segunda-feira, 28 de maio de 2012 21:01
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 28 de maio de 2012 21:10
- Marcado como Resposta chilipi_10 quarta-feira, 30 de maio de 2012 03:09
Todas as Respostas
-
Chilipi_10,
Veja este exemplo:
Create Procedure P_Valores @MeusValores Varchar(100) As Begin Set NoCount On Declare @Comando Varchar(1000) Set @Comando= 'Declare @Tabela Table (Nomes Varchar(50)) Insert Into @Tabela Values(''Pedro''),(''Fernanda''),(''Eduardo'') Select * from @Tabela Where Nomes In ('+@MeusValores+')' Exec(@Comando) End Declare @Valores Varchar(100) Set @Valores = '''Pedro'''+','+'''Fernanda'''+','+'''Eduardo''' Exec P_Valores @Valores
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]
-
Você pode criar um função que tera objetivo receber um valor delimitado (1,2,3,4,5,6) e fazer a sua consulta usando de JOIN com a mesma, exemplo:
CREATE FUNCTION SplitID ( @IDString VARCHAR(1000) ) RETURNS @IDs TABLE (ID INT) AS BEGIN DECLARE @Position int WHILE len(@IDString) > 0 BEGIN SET @Position = charindex(',', @IDString) IF @Position > 0 begiN INSERT @IDs SELECT CONVERT(INT, LEFT(@IDString, @Position - 1)) SET @IDString = RIGHT(@IDString, LEN(@IDString) - @Position) END ELSE BEGIN INSERT @IDs SELECT CONVERT(INT, @IDString) SET @IDString = '' END END RETURN END
SQL
DECLARE @EmpresaIDs VARCHAR(2000) SET @EmpresaIDs = '1, 2, 3, 4, 5' SELECT E.* FROM Empresas E INNER JOIN SplitIDString(@EmpresaIDs) I ON E.Empresa = I.ID
Referencia:
http://p2p.wrox.com/sql-server-2000/37871-passing-clause-stored-procedure.html
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Editado Vitor Mendes segunda-feira, 28 de maio de 2012 21:01
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 28 de maio de 2012 21:10
- Marcado como Resposta chilipi_10 quarta-feira, 30 de maio de 2012 03:09
-
Valeu pessoal!
Fiz os dois exemplos com calma e o segundo foi muito util obrigado ae galera pela ajuda.
Abraços
- Editado chilipi_10 quarta-feira, 30 de maio de 2012 03:09