SQL - Variable escalar

   
Vista:
Imágen de perfil de Jhon Jairo

Variable escalar

Publicado por Jhon Jairo (19 intervenciones) el 21/03/2017 00:40:04
Hola uso sql 2012 y tengo un problema con un sp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
USE [Banco2]
GO
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE PROCEDURE [dbo].[SP_PROMEDIO_SALDO_CUENTAS]
DECLARE @nombre_cliente NVARCHAR(50)
AS
 
SELECT avg(n.Saldo) from(
 select a.DocIdent, a.Apellido, a.Nombre, n.Saldo
 from dbo.Cliente a inner join dbo.CuentaxCliente n
 on a.DocIdent = n.DocIdent
 where a.Nombre = @nombre_cliente
)


Me salen los errores
Mens 156, Nivel 15, Estado 1, Procedimiento SP_PROMEDIO_SALDO_CUENTAS, Línea 3
Sintaxis incorrecta cerca de la palabra clave 'DECLARE'.
Mens 156, Nivel 15, Estado 1, Procedimiento SP_PROMEDIO_SALDO_CUENTAS, Línea 4
Sintaxis incorrecta cerca de la palabra clave 'AS'.
Mens 137, Nivel 15, Estado 2, Procedimiento SP_PROMEDIO_SALDO_CUENTAS, Línea 10
Debe declarar la variable escalar "@nombre_cliente".
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

Variable escalar

Publicado por bruno (3 intervenciones) el 21/03/2017 16:53:34
1
2
3
4
5
6
7
8
9
10
11
12
13
USE AdventureWorks2012;
GO
CREATE PROCEDURE HumanResources.uspGetEmployeesTest2
    @LastName nvarchar(50),
    @FirstName nvarchar(50)
AS
 
    SET NOCOUNT ON;
    SELECT FirstName, LastName, Department
    FROM HumanResources.vEmployeeDepartmentHistory
    WHERE FirstName = @FirstName AND LastName = @LastName
    AND EndDate IS NULL;
go
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 Jhon Jairo

Variable escalar

Publicado por Jhon Jairo (19 intervenciones) el 21/03/2017 17:34:06
Como?

Agrego set nocoun on?

Quedó así
USE [Banco2]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SP_PROMEDIO_SALDO_CUENTAS]
@nombre_cliente NVARCHAR(50)
AS

set nocount on;
SELECT avg(n.Saldo) from(
select a.DocIdent, a.Apellido, a.Nombre, n.Saldo
from dbo.Cliente a inner join dbo.CuentaxCliente n
on a.DocIdent = n.DocIdent
where a.Nombre = @nombre_cliente
);
go

y me sale el error:
Mens 102, Nivel 15, Estado 1, Procedimiento SP_PROMEDIO_SALDO_CUENTAS, Línea 12
Sintaxis incorrecta cerca de ';'.
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

Variable escalar

Publicado por Isaias (848 intervenciones) el 21/03/2017 18:10:21
Jhon

Si solo quieres que el PROCEDIMIENTO te regrese el AVG(), deberia quedar asi

1
2
3
4
5
6
7
8
9
10
CREATE PROCEDURE [dbo].[SP_PROMEDIO_SALDO_CUENTAS]
@nombre_cliente NVARCHAR(50)
AS
 
set nocount on
 
select AVG(n.Saldo)
from dbo.Cliente a inner join dbo.CuentaxCliente n
on a.DocIdent = n.DocIdent
where a.Nombre = @nombre_cliente

Los ; (punto y coma) y GO, no funcionan cuando se crea un PROCEDIMIENTO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jhon Jairo

Variable escalar

Publicado por Jhon Jairo (19 intervenciones) el 21/03/2017 20:43:27
Muchas gracias... me funcionó.

Tengo otra duda. Si quiero hacer la misma consulta pero verificando la existencia del cliente y si posee cuentas, ¿Por qué esto no me funciona?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
GO
 
/*Listar las cuentas de cualquier cliente, indicando el nombre del cliente*/
/*Se debe verificar la existencia del cliente y si posee cuentas */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE PROCEDURE [dbo].[CUENTAS_DE_CUALQUIER_CLIENTE]
@nombre_cliente NVARCHAR(50)
as
 
IF LEN(ISNULL(@nombre_cliente, '')) = 0
	PRINT 'Este cliente no tiene existe, intente de nuevo'
ELSE
begin
	IF EXISTS (select Nombre from dbo.Cliente where Nombre = @nombre_cliente)
		 select a.DocIdent, a.Apellido, a.Nombre, n.NroCuenta
		 from dbo.Cliente a inner join dbo.CuentaxCliente n
		 on a.DocIdent = n.DocIdent
		 where a.Nombre = @nombre_cliente
	ELSE
		PRINT 'No tiene cuenta'
  end

Dice comandos ejectuados correctamente, pero no muestra los mensajes... muestra una tabla con los datos
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

Variable escalar

Publicado por Isaias (848 intervenciones) el 21/03/2017 22:46:44
No se que tanta experiencia tengas con SQL SERVER, pero las instrucciones PRINT, solo funcionan cuando ejecutas tu codigo en la ventana de QUERY, el procedimiento, jamas enviara un mensaje con PRINT
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