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

[SOLUCIONADO] Compatibilidad de código entre MySQL y SQLServer

Estas en el tema de Compatibilidad de código entre MySQL y SQLServer en el foro de Mysql en Foros del Web. Buenos días, tengo una parte de un script que debería funcionar en MySQL, es algo muy básico, solo creación de unas tablas, poblarlas y finalmente ...
  #1 (permalink)  
Antiguo 08/06/2013, 12:04
Avatar de paula23andrea  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 4 meses
Puntos: 1
Pregunta Compatibilidad de código entre MySQL y SQLServer

Buenos días, tengo una parte de un script que debería funcionar en MySQL, es algo muy básico, solo creación de unas tablas, poblarlas y finalmente unas consultas, pero requiero saber qué modificaciones debo hacer para que funcione también en SQLServer, Gracias!

Código MySQL:
Ver original
  1. CREATE DATABASE Divertirnos_SA;
  2.  
  3.  CREATE TABLE Empleado
  4.   {
  5.     Id_emp Integer not null,
  6.     Nom_emp varchar(30),
  7.     Dir_emp varchar(30),
  8.     EstadoC_emp varchar(15),
  9.  
  10.    PRIMARY KEY (Id_emp)
  11.   };
  12.  
  13.  CREATE TABLE Departamento
  14.   {
  15.     Cod_dpto Integer not null,
  16.     Nom_dpto varchar(30),
  17.  
  18.    PRIMARY KEY (Cod_dpto)
  19.   };
  20.  
  21.  INSERT INTO Empleado
  22.    VALUES (40, Luis Tovar, Cra 16 Bis N° 69-69, Soltero);
  23.  
  24.   INSERT INTO Empleado
  25.    VALUES (41, Felipe Castañeda, Tv 46 Sur N° 13-19, Viudo);
  26.  
  27.   INSERT INTO Empleado
  28.    VALUES (42, Johan Romero, Cll 307-55, Casado);
  29.  
  30.   INSERT INTO Empleado
  31.    VALUES (43, Cristian Perez, Av 6826-01, Soltero);
  32.  INSERT INTO Departamento
  33.    VALUES (999, Seguridad);
  34.  
  35.   INSERT INTO Departamento
  36.    VALUES (998, Cocina);
  37.  
  38.   INSERT INTO Departamento
  39.    VALUES (997, Ventas);
  40.  
  41.  
  42. SELECT Cod_evt, GastosS_evt, GastosI_evt FROM Evento ;
  43.  
  44. SELECT Valor_evt FROM Evento;
  45.  
  46. SELECT * FROM Cliente;
  47.  
  48. SELECT Id_emp, Nom_emp FROM Empleado, Emp-Evt(vende), Evento WHERE Valor_evt>3000000;
  49.  
  50. SELECT Id_emp, Nom_emp, Dir_emp, EstadoC_emp, Telefono_emp FROM Empleado, Telefono_emp, Emp-TipoC(tiene) WHERE Empleado.Id_emp= Emp-TipoC(tiene).Id_emp= Telefono_emp.Id_emp;

Las consultas hacen referencia a otras tablas, existen, pero no las puse acá por longitud del código...

Agradezco a quien me oriente
__________________
Suerte!!
  #2 (permalink)  
Antiguo 08/06/2013, 13:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Compatibilidad de código entre MySQL y SQLServer

Bueno, hay varias cosas que corregir:
1) Los corchetes ({}) no tienen uso en MySQL. No sirven para nada y si los usas generarán errores de sintaxis.
2) Todo nombre de columna que contenga caracteres especiales u operadores, debe ser escrito entre acentos graves (`).
3) Toda cadena de texto debe ser puesta entre apóstrofos (').
4) No confundir un apóstrofo (') con un acento grave (`). Son cosas diferentes.
5) Las comillas (") sólo se pueden usar como reemplazo de los acentos graves. Para ser usadas en textos hay que reconfigurar el modo del servidor.
5) Es preferible usar INNER JOIN y no los JOIN implícitos (la coma).
6) Ciertas clausulas y sintaxis propias de SQL Server no las entiende MySQL (de hecho tampoco las entienden otros DBMS). Evitalas.
7) Usa el manual de referencia... Eso es lo que hacemos todos al cambiar de DBMS.

Código MySQL:
Ver original
  1. CREATE DATABASE Divertirnos_SA;
  2. USE Divertirnos_SA;
  3.  DROP TABLE IF EXISTS Empleado;
  4.  DROP TABLE IF EXISTS Departamento;
  5.  
  6.  CREATE TABLE Empleado
  7.   (
  8.     Id_emp INTEGER NOT NULL,
  9.     Nom_emp VARCHAR(30),
  10.     Dir_emp VARCHAR(30),
  11.     EstadoC_emp VARCHAR(15),
  12.  
  13.    PRIMARY KEY (Id_emp)
  14.   );
  15.  
  16.  CREATE TABLE Departamento
  17.   (
  18.     Cod_dpto INTEGER NOT NULL,
  19.     Nom_dpto VARCHAR(30),
  20.  
  21.    PRIMARY KEY (Cod_dpto)
  22.   );
  23.  
  24.  INSERT INTO Empleado
  25.    VALUES (40, 'Luis Tovar', 'Cra 16 Bis N° 69-69', 'Soltero');
  26.  
  27.   INSERT INTO Empleado
  28.    VALUES (41, 'Felipe Castañeda', 'Tv 46 Sur N° 13-19', 'Viudo');
  29.  
  30.   INSERT INTO Empleado
  31.    VALUES (42, 'Johan Romero', 'Cll 30 N° 7-55', 'Casado');
  32.  
  33.   INSERT INTO Empleado
  34.    VALUES (43, 'Cristian Perez', 'Av 68 N° 26-01', 'Soltero');
  35.  INSERT INTO Departamento
  36.    VALUES (999, 'Seguridad');
  37.  
  38.   INSERT INTO Departamento
  39.    VALUES (998, 'Cocina');
  40.  
  41.   INSERT INTO Departamento
  42.    VALUES (997, 'Ventas');
  43.  
  44. SELECT Cod_evt, GastosS_evt, GastosI_evt FROM Evento ;
  45.  
  46. SELECT Valor_evt FROM Evento;
  47.  
  48. SELECT * FROM Cliente;
  49.  
  50. SELECT Id_emp, Nom_emp
  51. FROM Empleado,
  52.     # Esto es inentendible ¿Que se supone que hace?
  53.      Emp-Evt(vende),
  54.  
  55.      Evento
  56. WHERE Valor_evt>3000000;
  57.  
  58. SELECT Id_emp, Nom_emp, Dir_emp, EstadoC_emp, Telefono_emp
  59. FROM Empleado, Telefono_emp,
  60.     # Esto es inentendible. No lo he visto ni en el manual de SQL Server
  61.      Emp-TipoC(tiene)
  62.     # Esto es inentendible ¿Que se supone que hace?
  63.     Empleado.Id_emp= Emp-TipoC(tiene).Id_emp= Telefono_emp.Id_emp;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 08/06/2013 a las 14:13
  #3 (permalink)  
Antiguo 08/06/2013, 14:12
Avatar de paula23andrea  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Compatibilidad de código entre MySQL y SQLServer

Quizá te refieras al nombre de las tablas, la tabla se llama Emp-Evt(vende), no pretendo hacer nada con los paréntesis.
Y en la última consulta, que es una sola
Código MySQL:
Ver original
  1. SELECT Id_emp, Nom_emp, Dir_emp, EstadoC_emp, Telefono_emp FROM Empleado, Telefono_emp, Emp-TipoC(tiene) WHERE Empleado.Id_emp= Emp-TipoC(tiene).Id_emp= Telefono_emp.Id_emp;

Estoy trayendo los datos Incluido teléfonos que están en tablas aparte, donde los id_emp coincidan, pero los llamo como nombre_tabla.atributo = nombre_tabla2.atributo .


Muchas gracias por las correcciones, la verdad soy bastante nueva en las bases de datos y todo me resulta confuso.
  #4 (permalink)  
Antiguo 08/06/2013, 14:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Compatibilidad de código entre MySQL y SQLServer

Bueno, uno de los problema, precisamente, es que no es aceptable para MySQL usar caracteres reservados a código, lo mismo que palabras reservadas, como parte de las denominaciones.
Los nombres de objetos de BBDD deben ser siempre alfabéticos o alfanuméricos, y MySQL no admite que inicien con números.
Se recomienda como buena práctica que sólo se usen como caracteres extensivos la raya (_), o el de moneda ($). Fuera de esos, ninguno.
Ergo, cambia el nombre de es tabla, en lo posible.
Suponiendo poder cambiarla, las condiciones quedarían:
Código MySQL:
Ver original
  1. SELECT Id_emp, Nom_emp, Dir_emp, EstadoC_emp, Telefono_emp
  2. FROM Empleado E
  3.     INNER JOIN Telefono_emp T ON E.Id_emp= T.Id_emp
  4.     INNER JOIN Emp_TipoC_tiene ET ON E.Id_emp = T.Id_emp;
Nota: En ningún DBMS que yo conozca se acpta definir una relación como "A = B = C", en todo caso la transitoriedad se debe especificar como "A = B AND B = C", o bien como "A = B AND A = C".
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/06/2013, 16:29
Avatar de paula23andrea  
Fecha de Ingreso: noviembre-2012
Mensajes: 38
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Compatibilidad de código entre MySQL y SQLServer

:O Pensé que así como en Java o C++ se podía esa relación, ya corregiré...
De nuevo muchas gracias, y ya para cerrar el tema, es cierto que las diferencias de código para PostGreSQL y SQL server son solo de punto y comas y de algunos tipos de datos?
Y otra pregunta, en alguna tabla definí datos tipo DATE, se pueden poblar así 01/02/2013, o es diferente? Gracias!

Es que me piden el script para cada motor.
__________________
Suerte!!
  #6 (permalink)  
Antiguo 08/06/2013, 16:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Compatibilidad de código entre MySQL y SQLServer

Cita:
Pensé que así como en Java o C++ se podía esa relación
El SQL no es un lenguaje de programación, sino un lenguaje de consultas.
Cita:
es cierto que las diferencias de código para PostGreSQL y SQL server son solo de punto y comas y de algunos tipos de datos?
No. Entre los diferentes DBMS las diferencias pueden ser sustanciales, y bastante amplias.
Por lo pronto, todos los DBMS entienden lo que se denomina ANSI-SQL, es decir, el SQL estandarizado, que incluye las sentencias, estructuras fundamentales y algunas funciones. Pero todo lo demás difiere, y puede ser en mucho.
Las funciones de fecha, concatenación, conversión, encriptación y control no son las mismas en todos los casos. Tampoco lo es siempre la sintaxis de los JOIN, que pueden tener diferente forma según cuál DBMS sea, o incuso cuál versión.
Otro problema grande es que no existe un lenguaje procedural estandarizado, por lo que los stored procedures no son portables entre ninguno de ellos sin grandes adaptaciones.
A esto hay que agregarle demasiadas cosas, pero en general uno se acostumbra a pasar de uno a otro, porque las estructuras fundamentales permanecen, y simplemente recurre a los manuales para definir cómo se hacen determinadas cosas en un DBMS en especial. Siempre hay algún modo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bases-de-datos-general, bd, sintaxis, 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 07:49.