Wer mal folgendes versucht:
select (case when bedingung1 then (case when bedingung2 then statement2 when bedingung3 then statement3 when bedingung4 then statement4 when bedingung5 then statement5 when bedingung6 then statement6 when bedingung7 then statement7 when bedingung8 then statement8 when bedingung9 then statement9 when bedingung10 then statement10 when bedingung11 then statement11 else statement12 end) else statement1 end) from linked_server.database.schema.table
wird feststellen, das einem der SQL Server eine Fehlermeldung bringt:
Meldung 8180, Ebene 16, Status 1, Zeile 1 Statement(s) could not be prepared. Meldung 125, Ebene 15, Status 4, Zeile 1 Case expressions may only be nested to level 10.
Leider findet man hierzu nichts in der MSDN und auch sonst im Web wurde ich nicht fündig um diesen Fehler zu beheben. Wobei die Ursache relativ simpel ist, und die Fehlermeldung einen schon drauf hinweist: Case Statements dürfen über eine Linked-Server Verbindung nur bis maximal 10 Schachtelungen haben.
So einen Hinweis hätte ich eigentlich in der MSDN erwartet!
Das kann man auch nicht durch irgendwelche Einstellungen am Linked Server ändern. Da hilft nur eine Behelfsview in der Quelldatenbank. Dann kann man auch fröhlich und mit einer Erfahrung mehr die Datenmigration fortsetzen.




0 Responses to “Case und Linked Server”