Anmelden

View Full Version : MS-SQL Linked Server zu AS400



marty
14-02-12, 15:22
Hallo zusammen,

ich musste auf einem SQL Server 2005 einen Linked Server (über ODBC) zu einer unserer Maschinen einrichten. Dabei bin ich auf ein Problem gestoßen:
Für Microsoft ist das kleinstmögliche Datum der 1.1.1753, aber auf der AS/400 ist das kleinste Datum der 01.01.0001.

Wenn ich jetzt auf dem SQL Server einen SELECT absetze der ein DATE Feld zurückliefert, dann kommt immer der Fehler "Fehler beim Konvertieren des DBTYPE_DBTIMESTAMP-Datentyps in datetime.". Erst ab SQL Server 2008 gibts einen entsprechenden Datentyp DATETIME2 in MS SQL.

Kennt jemand einen Weg mit dem ich trotzdem an die Tabelleninhalte der AS400 komme?

Fuerchau
14-02-12, 15:27
Du kannst den Wert ja beim Select casten oder wenn 1.1.0001 auf NULL setzen:

char(MyDate)

case
when MyDate = '0001-01-01' then NULL
else MyDate
end as MyDate

marty
14-02-12, 15:58
Hatte ich auch mal probiert, klappt aber auch nicht:
"Bei der Konvertierung eines char-Datentyps in einen datetime-Datentyp liegt der datetime-Wert außerhalb des gültigen Bereichs."

Auch mit ISNULL(DB2_DATE_COLUMN) komme ich nicht weiter...

BenderD
14-02-12, 16:44
... keine Erfahrung mit linked Server, aber wennd er auf eine View zugreifen kann, dann kann man das Käse Construct auf der AS/400 in eine View packen. Oder halt von der AS/400 mit ArdGate auf den SQL Server zugreifen...

D*B

Fuerchau
14-02-12, 18:42
ISNULL kann ja nicht weiterhelfen, da der Wert ja nicht NULL ist.

Also bleibt dir nur die View für den CASE oder der Upgrade auf SQL-Server 2008.

B.Hauser
15-02-12, 06:18
ISNULL kann ja nicht weiterhelfen, da der Wert ja nicht NULL ist.

Also bleibt dir nur die View für den CASE oder der Upgrade auf SQL-Server 2008.

... während IFNULL einen NULL-Wert in einen Default-Wert konvertiert, konvertiert NULLIF einen Default-Wert in einen NULL-Wert!

Birgitta