Forum: PC-Programmierung SQL-Befehl für Datenbankservertyp;


von interrupt (Gast)


Lesenswert?

Hallo,

zugegeben etwas OT, aber bei dem hier versammelten Sachverstand 
vielleicht trotzdem zu beantworten :

Gibt es einen SQL-Befehl, mit dem man den Typ einer Datenbankserver 
abfragen kann (also z.B. ob MSSQL, MySQL, Oracle etc.)
Soll in einem GNU-CPP-Programm unter Windows 64 Bit ausgeführt werden.

Danke, s.

: Verschoben durch Moderator
von Programmierer (Gast)


Lesenswert?

Wenn ich mich über das MySQL Protokoll mit einem DB-Server verbinde, 
kann ich davon ausgehen dass es sich um einen MySQL Server handelt. 
Gleiches gilt für MSSQL etc...

von interrupt (Gast)


Lesenswert?

Die Verbindung erfolgt über ODBC-Verbindungen zu zwei unterschiedlichen 
Datenbankservern, die (bisher) sowohl MSSQL als auch MySQL-Server sein 
können, und zwischen denen Daten gespiegelt werden sollen.

Da die unterschiedlichen Datenbankserver verschiedene Bezeichungen für 
die gleichen Datentypen verwenden (z.B. int / integer) müssen bei den 
Fallunterscheidungen für die notwendigen Überprüfungen die Typen der 
Datenbankserver bekannt sein.

von Markus F. (mfro)


Lesenswert?

interrupt schrieb:
> Da die unterschiedlichen Datenbankserver verschiedene Bezeichungen für
> die gleichen Datentypen verwenden (z.B. int / integer) müssen bei den
> Fallunterscheidungen für die notwendigen Überprüfungen die Typen der
> Datenbankserver bekannt sein.

Eigentlich sollte ODBC genau das unnötig machen.

Falls man's trotzdem unbedingt machen will (oder muß), dann lieber per 
entsprechendem ODBC-Aufruf die Datenquelle abfragen statt per SQL:
1
SQLGetInfo(dbc, SQL_DBMS_NAME, (SQLPOINTER)dbms_name,
2
         sizeof(dbms_name), NULL);
3
SQLGetInfo(dbc, SQL_DBMS_VER, (SQLPOINTER)dbms_ver,
4
         sizeof(dbms_ver), NULL);

Den Datentyp INT sollten meiner blassen Erinnerung nach aber beide 
Datenbanksysteme kennen und exakt identisch implementieren?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Markus F. schrieb:
> Eigentlich sollte ODBC genau das unnötig machen.

Bei Datentypen vermutlich meistens ja.
Aber bereits Banalitäten wie
1
select top 10 * from Tabelle order by Zeit desc

werden mitnichten von jeder SQL-Datenbank verstanden.

von Markus F. (mfro)


Lesenswert?

Rufus Τ. Firefly schrieb:
> select top 10 * from Tabelle order by Zeit desc

nun, genau die Banalität versteht außer MSSQL keiner...

von Peter II (Gast)


Lesenswert?

Markus F. schrieb:
> nun, genau die Banalität versteht außer MSSQL keiner...

Limit versteht auch Oracle nicht.

Jeder SQL-Server hat Erweiterungen, sobald man sie nutzt legt man sich 
fest.

von Jens G. (jensig)


Lesenswert?

Für sowas sollte man FETCH FIRST nehmen, was soweit ich weis, Standard 
SQL ist. Wenn das manche DBs nicht kennen - Pech.

>Eigentlich sollte ODBC genau das unnötig machen.

Genau ...
Andererseits hat ODBC aber auch viele interessante Funktionen, um eben 
solche Unterschiede zw. den Plattformen abzufragen (z.B. 
SQLGetTypeInfo), damit die Applikation (sofern intelligent genug) sich 
anpassen kann.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.