SQL - Un error de almacenamiento Almacenado en sql server

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

Un error de almacenamiento Almacenado en sql server

Publicado por Maria (6 intervenciones) el 28/11/2017 21:01:57
Hola, alguien me puede ayudar con este error que me esta dando
Esta es la consulta:
1
2
3
4
5
6
7
8
9
10
11
12
13
ALTER PROCEDURE [dbo].[Cliente_NombreCompleto] (@Id_Cliente int, @NombreApellido varchar(150))
 
AS
BEGIN
 
Declare @Nombre varchar(50), @PApellido varchar(50), @SApellido varchar(50), @NombreCompleto varchar(150);
Set @Nombre=(Select Cliente.Nombre from Cliente where Cliente.Id_Cliente=Id_Cliente)
SET @PApellido=(Select Cliente.Primer_Apellido from Cliente where Cliente.Primer_Apellido=@PApellido);
SET @SApellido=(Select Cliente.Segundo_Apellido from Cliente where Cliente.Segundo_Apellido=@SApellido);
Set @NombreCompleto=(@Nombre+ @PApellido+@SApellido);
Return cast (@NombreApellido as varchar);
 
END

Ejecutado
1
execute dbo.Cliente_NombreCompleto 20, '"Maria Lopez"'

Este es el errror , esta hecho en sql server
Msg 512, Level 16, State 1, Procedure Cliente_NombreCompleto, Line 7 [Batch Start Line 21]
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Msg 245, Level 16, State 1, Procedure Cliente_NombreCompleto, Line 11 [Batch Start Line 21]
Conversion failed when converting the varchar value '"Maria Lopez"' to data type int.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Un error de almacenamiento Almacenado en sql server

Publicado por Isaias (1921 intervenciones) el 28/11/2017 22:10:42
Desconozco que tanta experiencia tengas en SQL, pero el error es muy descriptivo

Alguno de estos querys, te esta regresando MAS DE UN VALOR

1
2
3
Set @Nombre=(Select Cliente.Nombre from Cliente where Cliente.Id_Cliente=Id_Cliente)
SET @PApellido=(Select Cliente.Primer_Apellido from Cliente where Cliente.Primer_Apellido=@PApellido);
SET @SApellido=(Select Cliente.Segundo_Apellido from Cliente where Cliente.Segundo_Apellido=@SApellido);

Ejecuta cada SELECT con el valor correspondiente y te daras cuenta de que lo que digo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

Un error de almacenamiento Almacenado en sql server

Publicado por Maria (6 intervenciones) el 28/11/2017 22:28:28
Me da el mismo error asi como lo enviastes y lo he probado de otras maneras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un error de almacenamiento Almacenado en sql server

Publicado por jams (16 intervenciones) el 28/11/2017 22:56:12
Maria creo que no se ha entendido la situación lo que esta ocurriendo, lo único que debes agregar es una condición que haga que tu consulta te regrese solo un registro que cumpla con la condición y así poder asignar el valor que te regrese a la variable, suponiendo que tu campo "id_cliente" es un identificador único de tu cliente adiciona esta condición a cada una de las consultas

tienes ademas alguno errores graves defines variables locales como
@Nombre varchar(50), @PApellido varchar(50), @SApellido varchar(50), @NombreCompleto varchar(150);

pero nunca les asignas un valor y luego en tu comparación lo tratas como si ya tuviera un valor asignado

SET @PApellido=(Select Cliente.Primer_Apellido from Cliente where Cliente.Primer_Apellido=@PApellido);

@PApellido no tiene un valor

lo único que tienes que hacer es lo siguiente en un solo select en lugar de los 3 que tienes


Select @Nombre=Nombre,@PApellido=Primer_Apellido,Cliente.@SApellido=Segundo_Apellido from Cliente where Cliente.Id_Cliente=Id_Cliente)

con esto tendías los valores de los campos en tus variables para posteriormente concatenar y regresar tu valor final


espero te sirvan mis observaciones

Saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Un error de almacenamiento Almacenado en sql server

Publicado por Isaias (1921 intervenciones) el 30/11/2017 20:13:07
Te dije que ejecutars SOLO los SELECT, donde creo que tienes el error, es aqui:

1
Select Cliente.Nombre from Cliente where Cliente.Id_Cliente=Id_Cliente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar