OVH Cloud OVH Cloud

Script à convertir MySQL vers SQL Server ?

5 réponses
Avatar
Arnold
Bonjour,

Je n'y connais rien en base de données et j'ai besoin d'insérer un script
MySQL dans une bdd SQL Server.

Bon évidemment ça marche pas alors je me tourne vers vous.

Voici le script en question :

-----------------------------------------------------------------------------
CREATE TABLE zonearea_post_reports (
report_id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT ,
post_id MEDIUMINT( 8 ) NOT NULL ,
reporter_id MEDIUMINT( 8 ) NOT NULL ,
report_status TINYINT( 1 ) DEFAULT '0' NOT NULL ,
report_time INT( 11 ) DEFAULT '0' NOT NULL,
report_comments TEXT,
PRIMARY KEY ( report_id )
);

ALTER TABLE zonearea_users ADD user_report_optout TINYINT( 1 ) DEFAULT '0'
NOT NULL ;

INSERT INTO zonearea_config ( config_name, config_value ) VALUES
('report_email', '1');
----------------------------------------------------------------------------


Si je l'execute tel quel dans SQL Server ça me donne : "Line 2 : Incorrect
Syntax near 'AUTO_INCREMENT'"

Merci pour votre aide ;)

5 réponses

Avatar
Fred BROUARD
Notes :

SQL est un langage reposant sur une norme. MS SQL Server est très proche de la
norme. MySQL en est loin !

1) MEDIUMINT n'existe pas en SQL
2) on ne précise jamais de longueur sur un type entier. Ainsi INTEGER (8) n'a
aucun sens.
3) IDENTITY est le mot clef pour un auto incrément interne (depuis norme 2003)
4) TINYINT existe en MS SQL Server mais pas dans la norme
5) la contrainte NOT NULL doit suivre le type de données dans la définition de
la colonne
6) une expression de valeur pour un type numériqaue s'écrit sans apostrophes de
délimitation
7) TEXT existe en MS SQL Server mais pas dans la norme (CLOB)
8) une contrainte de table doit être nommée
9) le séparateur d'ordre SQL dans un batch est l'instruction GO qui s'adresse à
l'outil (parser)

CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Arnold a écrit:
Bonjour,

Je n'y connais rien en base de données et j'ai besoin d'insérer un script
MySQL dans une bdd SQL Server.

Bon évidemment ça marche pas alors je me tourne vers vous.

Voici le script en question :

-----------------------------------------------------------------------------
CREATE TABLE zonearea_post_reports (
report_id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT ,
post_id MEDIUMINT( 8 ) NOT NULL ,
reporter_id MEDIUMINT( 8 ) NOT NULL ,
report_status TINYINT( 1 ) DEFAULT '0' NOT NULL ,
report_time INT( 11 ) DEFAULT '0' NOT NULL,
report_comments TEXT,
PRIMARY KEY ( report_id )
);

ALTER TABLE zonearea_users ADD user_report_optout TINYINT( 1 ) DEFAULT '0'
NOT NULL ;

INSERT INTO zonearea_config ( config_name, config_value ) VALUES
('report_email', '1');
----------------------------------------------------------------------------


Si je l'execute tel quel dans SQL Server ça me donne : "Line 2 : Incorrect
Syntax near 'AUTO_INCREMENT'"

Merci pour votre aide ;)




Avatar
Arnold
Bonsoir et merci pour votre réponse !

Voila jai testé en copiant exactement ça :
---------------------------------------------------------
CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO
------------------------------------------------------

Résultat de SQL Server :

Impossible de terminer la préparation différée :
Line 18 : incorrect syntax near 'GO'
Line 14 : incorrect syntax near 'GO'
Incorrect Syntax near the keyword 'ALTER'


Une idée ?

Merci !


"Fred BROUARD" a écrit dans le message de news:

Notes :

SQL est un langage reposant sur une norme. MS SQL Server est très proche
de la norme. MySQL en est loin !

1) MEDIUMINT n'existe pas en SQL
2) on ne précise jamais de longueur sur un type entier. Ainsi INTEGER (8)
n'a aucun sens.
3) IDENTITY est le mot clef pour un auto incrément interne (depuis norme
2003)
4) TINYINT existe en MS SQL Server mais pas dans la norme
5) la contrainte NOT NULL doit suivre le type de données dans la
définition de la colonne
6) une expression de valeur pour un type numériqaue s'écrit sans
apostrophes de délimitation
7) TEXT existe en MS SQL Server mais pas dans la norme (CLOB)
8) une contrainte de table doit être nommée
9) le séparateur d'ordre SQL dans un batch est l'instruction GO qui
s'adresse à l'outil (parser)

CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Arnold a écrit:
Bonjour,

Je n'y connais rien en base de données et j'ai besoin d'insérer un script
MySQL dans une bdd SQL Server.

Bon évidemment ça marche pas alors je me tourne vers vous.

Voici le script en question :

-----------------------------------------------------------------------------
CREATE TABLE zonearea_post_reports (
report_id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT ,
post_id MEDIUMINT( 8 ) NOT NULL ,
reporter_id MEDIUMINT( 8 ) NOT NULL ,
report_status TINYINT( 1 ) DEFAULT '0' NOT NULL ,
report_time INT( 11 ) DEFAULT '0' NOT NULL,
report_comments TEXT,
PRIMARY KEY ( report_id )
);

ALTER TABLE zonearea_users ADD user_report_optout TINYINT( 1 ) DEFAULT
'0' NOT NULL ;

INSERT INTO zonearea_config ( config_name, config_value ) VALUES
('report_email', '1');
----------------------------------------------------------------------------


Si je l'execute tel quel dans SQL Server ça me donne : "Line 2 :
Incorrect Syntax near 'AUTO_INCREMENT'"

Merci pour votre aide ;)





Avatar
Fred BROUARD
Quel outil utilisez vous pour envoyer un tel script SQL ?
1) Query Analyzer (Analyseur de requêtes)
2) osql / isql
3) autre, précisez

A +

Arnold a écrit:
Bonsoir et merci pour votre réponse !

Voila jai testé en copiant exactement ça :
---------------------------------------------------------
CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO
------------------------------------------------------

Résultat de SQL Server :

Impossible de terminer la préparation différée :
Line 18 : incorrect syntax near 'GO'
Line 14 : incorrect syntax near 'GO'
Incorrect Syntax near the keyword 'ALTER'


Une idée ?

Merci !


"Fred BROUARD" a écrit dans le message de news:


Notes :

SQL est un langage reposant sur une norme. MS SQL Server est très proche
de la norme. MySQL en est loin !

1) MEDIUMINT n'existe pas en SQL
2) on ne précise jamais de longueur sur un type entier. Ainsi INTEGER (8)
n'a aucun sens.
3) IDENTITY est le mot clef pour un auto incrément interne (depuis norme
2003)
4) TINYINT existe en MS SQL Server mais pas dans la norme
5) la contrainte NOT NULL doit suivre le type de données dans la
définition de la colonne
6) une expression de valeur pour un type numériqaue s'écrit sans
apostrophes de délimitation
7) TEXT existe en MS SQL Server mais pas dans la norme (CLOB)
8) une contrainte de table doit être nommée
9) le séparateur d'ordre SQL dans un batch est l'instruction GO qui
s'adresse à l'outil (parser)

CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Arnold a écrit:

Bonjour,

Je n'y connais rien en base de données et j'ai besoin d'insérer un script
MySQL dans une bdd SQL Server.

Bon évidemment ça marche pas alors je me tourne vers vous.

Voici le script en question :

-----------------------------------------------------------------------------
CREATE TABLE zonearea_post_reports (
report_id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT ,
post_id MEDIUMINT( 8 ) NOT NULL ,
reporter_id MEDIUMINT( 8 ) NOT NULL ,
report_status TINYINT( 1 ) DEFAULT '0' NOT NULL ,
report_time INT( 11 ) DEFAULT '0' NOT NULL,
report_comments TEXT,
PRIMARY KEY ( report_id )
);

ALTER TABLE zonearea_users ADD user_report_optout TINYINT( 1 ) DEFAULT
'0' NOT NULL ;

INSERT INTO zonearea_config ( config_name, config_value ) VALUES
('report_email', '1');
----------------------------------------------------------------------------


Si je l'execute tel quel dans SQL Server ça me donne : "Line 2 :
Incorrect Syntax near 'AUTO_INCREMENT'"

Merci pour votre aide ;)










--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Arnold
Autant pour moi tout est ok (merci) mais (il y a toujours un mais)

J'ai une erreur sur le site web (sûrement à cause d'un fichier php à
l'intérieur du quel il y a quelques lignes pour interroger un serveur MySQL
au lieu de SQL Server)

Voila l'erreur affichée :

------------------------------------------

SQL Error : 37000 [Microsoft][ODBC SQL Server Driver][SQL Server]Column
'u.user_email' is invalid in the select list because it is not contained in
either an aggregate function or the GROUP BY clause.

SELECT u.user_email FROM phpbb_auth_access aa, phpbb_user_group ug,
phpbb_groups g, phpbb_users u WHERE aa.forum_id = 3 AND aa.auth_mod = 1 AND
g.group_single_user = 1 AND ug.group_id = aa.group_id AND g.group_id =
aa.group_id AND u.user_id = ug.user_id AND u.user_report_optout <> 1 GROUP
BY u.user_id, u.username ORDER BY u.user_id

Line : 62
File : functions_report.php
---------------------------------------------


Voila le fichier incriminé (une partie du code dont la ligne 62 mentionnée
ci dessus):

-------------------------------------------------

$sql = "SELECT u.user_email
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " .
GROUPS_TABLE . " g, " . USERS_TABLE . " u
WHERE aa.forum_id = $forum_id
AND aa.auth_mod = " . TRUE . "
AND g.group_single_user = 1
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
AND u.user_id = ug.user_id
AND u.user_report_optout <> 1
GROUP BY u.user_id, u.username
ORDER BY u.user_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query forum moderator information',
'', __LINE__, __FILE__, $sql);
}

$moderators = array();
while( $row = $db->sql_fetchrow($result) )
{
$moderators[] = $row['user_email'];
}

$sql = "SELECT g.group_id
FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " .
GROUPS_TABLE . " g
WHERE aa.forum_id = $forum_id
AND aa.auth_mod = " . TRUE . "
AND g.group_single_user = 0
AND g.group_type <> ". GROUP_HIDDEN ."
AND ug.group_id = aa.group_id
AND g.group_id = aa.group_id
GROUP BY g.group_id, g.group_name
ORDER BY g.group_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query forum moderator information',
'', __LINE__, __FILE__, $sql);
}

while( $row = $db->sql_fetchrow($result) )
{
$groups[] = $row['group_id'];
}

if ( sizeof($groups) )
{
$sql = "SELECT u.user_email
FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE
. " u
WHERE ug.group_id = g.group_id
AND g.group_single_user = 0
AND g.group_id IN (" . implode(',', $groups) . ")
AND ug.user_id = u.user_id
AND u.user_report_optout <> 1";
if ( !($result = $db->sql_query($sql)) )
{
==============> LIGNE 62 // message_die(GENERAL_ERROR, 'Could not query
forum moderator information', '', __LINE__, __FILE__, $sql);
}

while( $row = $db->sql_fetchrow($result) )
{
if ( !in_array($row['user_email'], $moderators) )
{
$moderators[] = $row['user_email'];
}


Je sais que c'est beaucoup vous demander mais pourriez m'aider svp ?

Merci beaucoup !



"Fred BROUARD" a écrit dans le message de news:
urPuA$
Quel outil utilisez vous pour envoyer un tel script SQL ?
1) Query Analyzer (Analyseur de requêtes)
2) osql / isql
3) autre, précisez

A +

Arnold a écrit:
Bonsoir et merci pour votre réponse !

Voila jai testé en copiant exactement ça :
---------------------------------------------------------
CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO
------------------------------------------------------

Résultat de SQL Server :

Impossible de terminer la préparation différée :
Line 18 : incorrect syntax near 'GO'
Line 14 : incorrect syntax near 'GO'
Incorrect Syntax near the keyword 'ALTER'


Une idée ?

Merci !


"Fred BROUARD" a écrit dans le message de
news:

Notes :

SQL est un langage reposant sur une norme. MS SQL Server est très proche
de la norme. MySQL en est loin !

1) MEDIUMINT n'existe pas en SQL
2) on ne précise jamais de longueur sur un type entier. Ainsi INTEGER (8)
n'a aucun sens.
3) IDENTITY est le mot clef pour un auto incrément interne (depuis norme
2003)
4) TINYINT existe en MS SQL Server mais pas dans la norme
5) la contrainte NOT NULL doit suivre le type de données dans la
définition de la colonne
6) une expression de valeur pour un type numériqaue s'écrit sans
apostrophes de délimitation
7) TEXT existe en MS SQL Server mais pas dans la norme (CLOB)
8) une contrainte de table doit être nommée
9) le séparateur d'ordre SQL dans un batch est l'instruction GO qui
s'adresse à l'outil (parser)

CREATE TABLE zonearea_post_reports
(report_id INTEGER NOT NULL IDENTITY,
post_id INTEGER NOT NULL,
reporter_id INTEGER NOT NULL,
report_status TINYINT NOT NULL DEFAULT 0,
report_time INTEGER NOT NULL DEFAULT 0,
report_comments TEXT,
CONSTRAINT PK_zonearea_post_reports PRIMARY KEY ( report_id )
)
GO

ALTER TABLE zonearea_users
ADD user_report_optout TINYINT NOT NULL DEFAULT '0'
GO

INSERT INTO zonearea_config ( config_name, config_value )
VALUES ('report_email', '1')
GO

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

Arnold a écrit:

Bonjour,

Je n'y connais rien en base de données et j'ai besoin d'insérer un
script MySQL dans une bdd SQL Server.

Bon évidemment ça marche pas alors je me tourne vers vous.

Voici le script en question :

-----------------------------------------------------------------------------
CREATE TABLE zonearea_post_reports (
report_id MEDIUMINT( 8 ) NOT NULL AUTO_INCREMENT ,
post_id MEDIUMINT( 8 ) NOT NULL ,
reporter_id MEDIUMINT( 8 ) NOT NULL ,
report_status TINYINT( 1 ) DEFAULT '0' NOT NULL ,
report_time INT( 11 ) DEFAULT '0' NOT NULL,
report_comments TEXT,
PRIMARY KEY ( report_id )
);

ALTER TABLE zonearea_users ADD user_report_optout TINYINT( 1 ) DEFAULT
'0' NOT NULL ;

INSERT INTO zonearea_config ( config_name, config_value ) VALUES
('report_email', '1');
----------------------------------------------------------------------------


Si je l'execute tel quel dans SQL Server ça me donne : "Line 2 :
Incorrect Syntax near 'AUTO_INCREMENT'"

Merci pour votre aide ;)










--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
Arnold
Merci beaucoup j'ai trouvé la solution.

En tout cas sans vous je n'y serais pas arrivé !

Salutations et encore merci !