Fórum while em stored procedure #3995
25/03/2009
ATENÇÃO SENHORES CONSULTORES RESPONDAM A PERGUNTA, NÃO ENVIEM SUGESTÕES QUE EU TESTO AQUI E NÃO FUNCIONAM. AGRADEÇO IMENSAMENTE.
O que eu preciso é:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SP_SELECT_RELATIONSHIP_USER_I]
(
@Identifier nvarchar(50),
@UserNum bigint
)
AS BEGIN
DECLARE @IdNumI bigint
IF NOT EXISTS(SELECT 1 FROM cc_UserIdentifier WHERE IDENTIFIER = @Identifier)
BEGIN
SELECT 2 AS TIPO, 'REGISTRO NÃO ENCONTRADO NA TABELA DE PARCEIROS COMERCIAIS.' AS MENSAGEM
END
IF NOT EXISTS(SELECT 1 FROM cc_Relationship WHERE IDNUM = @UserNum) BEGIN
SELECT 2 AS TIPO, 'LICENÇA NÃO ENCONTRADA.' AS MENSAGEM
END
ELSE BEGIN
SELECT
@IdNumI = IDNUM
FROM cc_Relationship WHERE IDI = @UserNum Aqui vai retornar 3 consultas, eu sei porque eu já testei, irá retornar 3 usuários, portanto, quero um while para enquanto listar usuários aqui....
END
Quero continuar pesquisando aqui e retornar todos os usuários listados aqui, ou seja, os 3 de cima, como não tem um while, ele retorna apenas 1 resultado, eu quero os 3.
SELECT
UserName,
Language,
Sex,
Birth,
NameFantasy,
FunctionCompany,
WebSite
FROM
cc_User
WHERE (Identifier = @Identifier) AND (UserNum = @IdNumI)
END
PS: Já tentei com inner join e nesse caso conforme a orientação que vocês me passaram, no entanto do jeito passado está retornando 162 resultados.
Então por favor me ensinei apenas a fazer o while para continuar pesquisando os registros encontrados na tabela relationship.
Regis
Posts
Regis tudo bem?
Tenho uma dúvida, o que a sua pergunta tem a ver com aplicações ASP.NET?
Este resultado não pode ser feito na aplicação? No C# por exemplo?
Você varre os primeiros.
SELECT
@IdNumI = IDNUM
FROM cc_Relationship WHERE IDI = @UserNum
END
foreach (DataRow row in _dt.Rows)
{
if(!row["IDNUM "].Equals(string.Empty))
{
//Faz o que você precisa
//Faz um método para varrer o segundo select
}
}
Não pode assim?
Não, tem que ser feito na stored procedure porque esse resultado é retornado para o webservice e para fins de clareza do código tudo em pesquisa do Banco.
Regis
Veja se a proc abaixo pode te ajudar.
CREATE PROCEDURE [dbo].[SP_SELECT_RELATIONSHIP_USER_I]
(
@Identifier nvarchar(50),
@UserNum bigint
)
AS BEGIN
DECLARE @IdNumI bigint
IF NOT EXISTS(SELECT 1 FROM cc_UserIdentifier WHERE IDENTIFIER = @Identifier)
BEGIN
SELECT 2 AS TIPO, 'REGISTRO NÃO ENCONTRADO NA TABELA DE PARCEIROS COMERCIAIS.' AS MENSAGEM
END
IF NOT EXISTS(SELECT 1 FROM cc_Relationship WHERE IDNUM = @UserNum) BEGIN
SELECT 2 AS TIPO, 'LICENÇA NÃO ENCONTRADA.' AS MENSAGEM
END
ELSE BEGIN
SELECT IDNUM INTO #tmpTbl FROM cc_Relationship WHERE IDI = @UserNum
WHILE EXISTS (SELECT TOP 1 IDNUM FROM #tmpTbl)
BEGIN
--SELECT * FROM #tmpTbl
SELECT TOP 1 @IdNumI = IDNUM FROM #tmpTbl
SELECT TOP 1 UserName, Language, Sex, Birth, NameFantasy, FunctionCompany, WebSite FROM cc_User
WHERE (Identifier = @Identifier) AND (UserNum = @IdNumI)
DELETE FROM #tmpTbl WHERE IDNUM = @IdNumI
END
END
END
Moderador existe sala de SQL??
Fabio
O Senhor conseguiu resolver a sua dúvida com o exemplo que postei?
Obrigado.
Fabio
Sim consegui,
Valew
Regis