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

Migrar query de Access a Sql server 2000

Estas en el tema de Migrar query de Access a Sql server 2000 en el foro de Bases de Datos General en Foros del Web. Saludos a todos, Mi problema es que necesito migrar unos querys que estan en access 97 a sql server 2000. Existen varias dudas: 1. Cómo ...
  #1 (permalink)  
Antiguo 10/12/2004, 06:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 55
Antigüedad: 19 años, 8 meses
Puntos: 0
Migrar query de Access a Sql server 2000

Saludos a todos,
Mi problema es que necesito migrar unos querys que estan en access 97 a sql server 2000.
Existen varias dudas:
1. Cómo asigno en sql una variable en el script?
2. Cual seria el equivalente en sql server 2000 la instrucción IIF?
3. Los queries en access 97, como los deberia crear en sql server, como vistas o procedimientos almacenados?

Agradeceria cualquier tipo de ayuda, aqui les dejo un trozo del código, a ver si me dan un poco de luz para poder migrarlos a sql:

SELECT Contrato, Contratista, Fecha_Cierre, [AñoFiscal xxxx] AS AF,

IIf(Month([Fecha_Cierre])>9,Month([Fecha_Cierre])-9,
Month([Fecha_Cierre])+3) AS Mes,
IIf([Mes]=1,1,0) AS M1Sol, IIf([Mes]=2,1,0) AS M2Sol

FROM CONTRATOS

WHERE
(((IIf(Month([Fecha_Cierre])>9,+1,0)+Year([Fecha_Cierre]))=[AñoFiscal xxxx]));

Hasta luego y gracias,
Jani

Última edición por Jani; 10/12/2004 a las 06:27
  #2 (permalink)  
Antiguo 13/12/2004, 10:10
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Las SELECT, con excepción de palabras reservadas propias del Access, concretamente el IIF son traducibles perfectamente de access a SQL, para las funciones, hay que buscar el equivalente, en el caso de IIF, debes utilizar CASE, tu ejemplo

SELECT Contrato, Contratista, Fecha_Cierre, [AñoFiscal xxxx] AS AF,

CASE WHEN Month([Fecha_Cierre])>9 THEN Month([Fecha_Cierre])-9
ELSE
Month([Fecha_Cierre])+3 END AS Mes,
CASE WHEN [Mes]=1 THEN 1 ELSE 0 END AS M1Sol, CASE WHEN [Mes]=2 THEN 1 ELSE 0 END AS M2Sol

FROM CONTRATOS

WHERE
(((CASE Month([Fecha_Cierre])>9 THEN 1 ELSE 0 END+Year([Fecha_Cierre]))=[AñoFiscal xxxx]))

Si los almacenas en Procedimientos Almacenados o en vistas, en cualquiera de las dos, el resultado debe ser el mismo, en general los PA son más rápidos y permiten hacer ORDER BY, desde una vista no puedes utilizar en PA, pero sí al reves, podrías utilizar una vista dentro de un PA.

Un saludo
  #3 (permalink)  
Antiguo 13/12/2004, 10:51
 
Fecha de Ingreso: agosto-2004
Mensajes: 55
Antigüedad: 19 años, 8 meses
Puntos: 0
Saludos,
Teri
La primera parte del código me funciono perfectamtente

SELECT Contrato, Contratista, Fecha_Cierre, [AñoFiscal xxxx] AS AF,

CASE WHEN Month([Fecha_Cierre])>9 THEN Month([Fecha_Cierre])-9
ELSE
Month([Fecha_Cierre])+3 END AS Mes,

pero al momento de utilizar la columna MES me envia un error de que ese nombre de columna no es válido y no se como hacer para poder utilizar el valor que esta almacenado en esa columna para realizar lo que sigue.

CASE WHEN [Mes]=1 THEN 1 ELSE 0 END AS M1Sol, CASE WHEN [Mes]=2 THEN 1 ELSE 0 END AS M2Sol

FROM CONTRATOS

WHERE
(((CASE Month([Fecha_Cierre])>9 THEN 1 ELSE 0 END+Year([Fecha_Cierre]))=[AñoFiscal xxxx]))

Agradeceria cualquier tipo de ayuda, Gracias
Jani
  #4 (permalink)  
Antiguo 14/12/2004, 01:50
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Perdona, no me fije, que por mes, te referías al valor que habías calculado antes, me temo que no vas a poder utilizarlo, debes volver a hacer el case

SELECT Contrato, Contratista, Fecha_Cierre, [AñoFiscal xxxx] AS AF,

CASE WHEN Month([Fecha_Cierre])>9 THEN Month([Fecha_Cierre])-9
ELSE
Month([Fecha_Cierre])+3 END AS Mes,
CASE WHEN (Month([Fecha_Cierre])>9 THEN Month([Fecha_Cierre])-9
ELSE
Month([Fecha_Cierre])+3)=1 THEN 1 ELSE 0 END AS M1Sol, CASE WHEN (Month([Fecha_Cierre])>9 THEN Month([Fecha_Cierre])-9
ELSE
Month([Fecha_Cierre])+3)=2 THEN 1 ELSE 0 END AS M2Sol

FROM CONTRATOS

WHERE
(((CASE Month([Fecha_Cierre])>9 THEN 1 ELSE 0 END+Year([Fecha_Cierre]))=[AñoFiscal xxxx]))

Es un poco rollo, pero por más que lo he intentado otras veces, no he conseguido que utilice alias anteriores

Un saludo
  #5 (permalink)  
Antiguo 14/12/2004, 08:41
 
Fecha de Ingreso: agosto-2004
Mensajes: 55
Antigüedad: 19 años, 8 meses
Puntos: 0
Saludos,

Gracias Teri ya pude resolver el query, muchisimas gracias,
Hasta luego,
Jani
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 12:54.