¿Podemos usar el resultado de una consulta de selección como condición para encontrar los registros?
Frecuentes
Visto 380 veces
1
primero tengo que encontrar el nombre del agente de la tabla de consulta si el nombre del agente se encuentra, entonces si la parte funcionará y si el nombre del agente no se encuentra, la segunda consulta es otra parte que funcionará. A continuación se muestra mi consulta, por favor, hágame saber dónde me equivoco. Gracias por adelantado
create proc ConfirmationMail_ToAgent
(
@Enquiry_Id nvarchar(50)
)
as
begin
select Agent_Name from Enquiry where Enquiry_Id = @Enquiry_Id as jh
if(jh != 'Select')
begin
select e.Agent_Name,e.Agent_Email,e.Client_Name,e.Handled_By,ef.EMail_Id from Enquiry e inner join Employee_FullDetail ef on e.Handled_By = ef.First_Name where e.Enquiry_Id = @Enquiry_Id
end
else
begin
select e.Client_Name,e.Client_Address,e.Handled_By,ef.EMail_Id from Enquiry e inner join Employee_FullDetail ef on e.Handled_By = ef.First_Name where e.Enquiry_Id = @Enquiry_Id
end
end
2 Respuestas
0
In SQL Server
, asigna la columna a una variable usando la siguiente sintaxis
DECLARE @Var varchar(xx)
SELECT @Var = [ColName] FROM [TableName]
Entonces su consulta debería verse así:
create proc ConfirmationMail_ToAgent
(
@Enquiry_Id nvarchar(50)
)
as
BEGIN
DECLARE @jh VARCHAR(100)
select @jh= Agent_Name from Enquiry where Enquiry_Id = @Enquiry_Id
if(@jh != 'Select')
begin
select e.Agent_Name,e.Agent_Email,e.Client_Name,e.Handled_By,ef.EMail_Id from Enquiry e inner join Employee_FullDetail ef on e.Handled_By = ef.First_Name where e.Enquiry_Id = @Enquiry_Id
end
else
begin
select e.Client_Name,e.Client_Address,e.Handled_By,ef.EMail_Id from Enquiry e inner join Employee_FullDetail ef on e.Handled_By = ef.First_Name where e.Enquiry_Id = @Enquiry_Id
end
end
Respondido el 21 de Septiembre de 13 a las 12:09
0
Bueno, realmente creo que tienes que leer sobre Principio DRY en la programación. Siga este principio y le ayudará a mantener su código en el futuro. Parece que no necesita 2 consultas aquí, solo puede usar una:
create proc ConfirmationMail_ToAgent
(
@Enquiry_Id nvarchar(50)
)
as
begin
select
case when e.Agent_Name != 'Select' then e.Agent_Name else e.Client_Name end as Name,
case when e.Agent_Name != 'Select' then e.Agent_Email else e.Client_Address end as Address,
e.Handled_By, ef.EMail_Id
from Enquiry as e
inner join Employee_FullDetail as ef on ef.First_Name = e.Handled_By
where e.Enquiry_Id = @Enquiry_Id
end
este será más fácil de mantener - si tiene que agregar columnas al conjunto de resultados, lo hace solo una vez, más fácil de leer - no tienes que pensar en - ¿cuál es la diferencia en estas 2 consultas? Para seguir completamente el principio DRY, esta consulta podría reescribirse, por ejemplo, así:
create proc ConfirmationMail_ToAgent
(
@Enquiry_Id nvarchar(50)
)
as
begin
select
C.Name, C.Email,
e.Client_Name, e.Handled_By, ef.EMail_Id
from Enquiry as e
inner join Employee_FullDetail as ef on ef.First_Name = e.Handled_By
outer apply (
select e.Agent_Name, e.Agent_Email where e.Agent_Name != 'Select' union all
select e.Client_Name, e.Client_Address where e.Agent_Name == 'Select'
) as C(Name, Email)
where e.Enquiry_Id = @Enquiry_Id
end
Respondido el 21 de Septiembre de 13 a las 16:09
LA consulta ANTERIOR está funcionando con la condición where, pero qué hacer si quiero la misma consulta sin ninguna condición where significa que quiero buscar cada registro si obtengo el nombre del agente, entonces el resultado será el nombre del agente y si obtengo el nombre del agente como seleccionar o anular el resultado será el nombre del cliente por favor ayúdenme a resolver el problema gracias por adelantado para obtener ayuda - Cocina
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql sql-server tsql or haz tu propia pregunta.
¿Y comprobó que el @jh a veces obtiene valor?
Select
. Te sugiero que insertesselect @jh as jh
justo antesif(...
para comprobar que recibe elSelect
- luis llahora la consulta funciona, pero ¿por qué esta consulta devuelve el mismo valor dos veces? Cocina
¿qué quieres decir? ¿Está enviando valores diferentes cada vez y Agent_Name es diferente? - luis ll
no, esta es la ejecución del procedimiento exec ConfirmationMail_ToAgent 'RH - 02/09/2013 - 2' y debajo aparece el resultado: Cocina
no, este es el procedimiento de ejecución exec ConfirmationMail_ToAgent 'RH - 02/09/2013 - 2' y debajo aparece el resultado Ish Travels packages@ishtravels.com Shiv Paul paul@roverholidays.com Ish Travels packages@ishtravels.com Shiv Paul paul@roverholidays .com- Cocina