Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Duda con envío de campos a una funcion

Estas en el tema de Duda con envío de campos a una funcion en el foro de SQL Server en Foros del Web. Hola amigos, Estoy haciendo una consulta en sql server, en la cual envío datos de una tabla dinámica, para ser evaluados en una función, el ...
  #1 (permalink)  
Antiguo 16/01/2017, 19:24
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Duda con envío de campos a una funcion

Hola amigos,

Estoy haciendo una consulta en sql server, en la cual envío datos de una tabla dinámica, para ser evaluados en una función, el problema yace que 2 de esos campos son de la fila actual y los otros dos de la fila anterior de la tabla.

La tabla sería algo así:

Nombre_Tabla_Resultados
CampoA
CampoB
CampoC

La función sería algo así:

Funcion_CampoC(CampoA, CampoB, CampoA - 1, CampoB - 1) y se obtiene el valor del Campo C.
En la primera fila el valor del CampoC es cero, pero para el resto de la tabla, no se como enviar los parámetros "CampoA - 1, CampoB - 1"

Cualquier ayuda para realizarlo será agradecida.

Saludos.
  #2 (permalink)  
Antiguo 17/01/2017, 08:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

Podrias usar la funcion row_number para numerar tus registros y luego hacer un left join con la misma tabla para obtener los valores de la fila anterior ;) algo como esto:
Código SQL:
Ver original
  1. CREATE TABLE #temp
  2.   (
  3.   id INT,
  4.   valor VARCHAR(20)
  5.   )
  6.  
  7.   INSERT INTO #temp VALUES (1,'yo')
  8.   INSERT INTO #temp VALUES (2,'tu')
  9.   INSERT INTO #temp VALUES (3,'el')
  10.   INSERT INTO #temp VALUES (4,'nosotros')
  11.  
  12.  
  13.   SELECT t1.id, t1.valor, t1.rn, t2.id id_anterior, t2.valor AS v_anterior  FROM(
  14.   SELECT *, ROW_NUMBER() OVER(ORDER BY id ASC) AS rn FROM #temp
  15.   ) AS t1 LEFT JOIN
  16.   (SELECT *, ROW_NUMBER() OVER(ORDER BY id ASC) AS rn FROM #temp) AS t2 ON (t1.rn=t2.rn+1)

Con eso obtienes algo como esto:

id valor rn id_anterior v_anterior
1 yo 1 NULL NULL
2 tu 2 1 yo
3 el 3 2 tu
4 nosotros 4 3 el
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/01/2017, 10:18
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

Gran idea, pero al tratar de implementarla, envía este mensaje:

Mens. 195, Nivel 15, Estado 10, Línea 4
'ROW_NUMBER' no es un nombre de función reconocido.

Tengo el SQL Server 2014
  #4 (permalink)  
Antiguo 17/01/2017, 10:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

puedes poner tu query? row_number es una funcion que esta desde sql server 2008
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 17/01/2017, 10:55
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

SELECT ROW_NUMBER() OVER(ORDER BY Plazo ASC) AS rn, *
FROM [dbo].[Tasas_Parcial] ('04-01-2017',1073)

lo estoy haciendo directamente en una función
  #6 (permalink)  
Antiguo 17/01/2017, 11:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

Asi no te va a funcionar, el row number es para que obtengas los valores de la tabla y los pases a la funcion
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 17/01/2017, 11:56
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

lo use directamente en una tabla de la base de datos y me aparece el mismo mensaje

SELECT *,
ROW_NUMBER() OVER(ORDER BY Documento ASC) AS rn
FROM [Cartera_Fondo]
  #8 (permalink)  
Antiguo 17/01/2017, 12:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

Ejecuta esto en tu server y dime que te regresa:

Código SQL:
Ver original
  1. SELECT @@version
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 17/01/2017, 12:49
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

Muestra esto:

Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)


Será porque también tengo instalado el sql server 2000 en mi pc.
  #10 (permalink)  
Antiguo 17/01/2017, 13:51
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

por eso no reconoce la funcion, te estas conectando a un server de sql 2000, y la funcion row_number aparecio en 2005
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 17/01/2017, 14:04
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

Hay alguna forma de solucionar esto sin desintalar el sql server 2000?
  #12 (permalink)  
Antiguo 17/01/2017, 14:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

A ver no es por tener instalado el sql server 2000, lo que pasa es que tu base de datos esta en sql server 2000 no en sql server 2014, ahora habria que revisar cual es el nivel de compatibilidad de tu base de datos y cambiarlo para que la base sea compatible para eso ejecuta esto:

Código SQL:
Ver original
  1. sp_dbcmptlevel 'nombre de tu base de datos'

o tambien lo puedes revisar con este query:

Código SQL:
Ver original
  1. USE tu_base_de_datos;  
  2. GO  
  3. SELECT compatibility_level  
  4. FROM sys.DATABASES WHERE name = 'tu_base_de_datos';  
  5. GO
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 17/01/2017, 14:14
 
Fecha de Ingreso: febrero-2016
Mensajes: 48
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Duda con envío de campos a una funcion

El nivel de compatibilidad actual es 80.
  #14 (permalink)  
Antiguo 17/01/2017, 14:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

Para funciones 2005 y posteriores necesitas cambiar el nivel de compatibilidad

https://msdn.microsoft.com/en-us/library/bb510680.aspx

Si tienes sql server 2014 deberia de ser 120

Como lo cambias, bueno si le das una revisada al link que te puse ahi veras como cambiarlo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 18/01/2017, 10:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con envío de campos a una funcion

Pero dice que tiene SQL SERVER 2000 !!!, no creo que solo con cambiarle la compatibilidad a la base sea suficiente
__________________
MCTS Isaias Islas
  #16 (permalink)  
Antiguo 18/01/2017, 10:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda con envío de campos a una funcion

Cita:
Iniciado por iislas Ver Mensaje
Pero dice que tiene SQL SERVER 2000 !!!, no creo que solo con cambiarle la compatibilidad a la base sea suficiente
Menciono que tenia sql server 2014........o tiene sql 2000 instalado y se conecta desde una instancia de 2014? :S
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: campos, funcion, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:18.