petere
Goto Top

MSSQL quenquery

Hallo,

ich stoße leider an die Grenzen meiner MSSQL-Kenntnisse. Ich muss diesen, eigentlich einfachen, UPDATE-Ausdruck via zwei Verbindungsserver-Verbindungen realisieren.

UPDATE lokal INNER JOIN shop ON lokal.Artikel = shop.ANR SET shop.IstESBs = lokal.IstESB

OPENQUERY(connLOKAL, 'select IstESB from lokal')
OPENQUERY(connSHOP, 'select IstESBs from shop')


Vielen Dank für eine zielführende Antwort
Peter

Content-Key: 254555

Url: https://administrator.de/contentid/254555

Printed on: April 24, 2024 at 15:04 o'clock

Member: MadMax
MadMax Nov 12, 2014 at 12:20:06 (UTC)
Goto Top
Hallo Peter,

das müßte etwa so lauten:
with	lokal as (select * from OPENQUERY(connLOKAL, 'select Artikel, IstESB from lokal')),  
	shop as (select * from OPENQUERY(connSHOP, 'select ANR, IstESBs from shop'))  
update	shop
set	IstESBs = lokal.IstESB
from	shop join lokal on lokal.Artikel = shop.ANR


Gruß, Mad Max
Member: petere
petere Nov 30, 2014 updated at 18:07:19 (UTC)
Goto Top
Hallo Max,

danke, das Script selbst wird ohne Fehler gestartet. Leider warte ich zum Übertragen der 100.000 Zeilen ewig, obwohl die übertragene Datenmenge sehr gering ist (keine 30 Zeichen je Zeile).

Führe ich die lokale Abfrage allein aus, dauert es 2 Sekunden, daran kann es also nicht liegen. Die beiden Server sind über eine 5 Mbit-Leitung synchron verbunden.
Es kommt keine Fehlermeldung.


Grüße, Peter
Member: MadMax
MadMax Dec 01, 2014 at 00:35:08 (UTC)
Goto Top
Hallo Peter,

die lokale Abfrage? Heißt das, connLOKAL ist der SQL Server, auf dem die Abfrage läuft?
Sag mir doch mal bitte, was connLOKAL und connSHOP für RDBMS sind, womöglich ist die Lösung für Dein Problem sogar ganz einfach.

Gruß, Mad Max
Member: petere
petere Dec 01, 2014 at 19:09:43 (UTC)
Goto Top
Hallo Max,

connLOKAL = mySQL 5.6
connSHOP = MSSQL 2005

der ausführende Server, auf dem die Abfrage ausgeführt wird, ist auch ein MSSQL 2005.

Andere Idee/Frage: wenn ich ein MSSQL-Export-Script durchführe, was den Export macht, dauert das 3 Sekunden. Könnte ich dieses Script irgendwie auslesen und per Abfrage ausführen?

Grüße, Peter
Member: MadMax
Solution MadMax Dec 02, 2014 updated at 17:44:17 (UTC)
Goto Top
Hallo Peter,

gut, daß die zu aktualisierende Datenbank auch ein SQL Server ist, dann geht es nämlich einfacher und vermutlich auch schneller:
update	connSHOP.<Datenbank>.<Schema>.shop 
set	IstESBs = l.IstESB
from	connSHOP.<Datenbank>.<Schema>.shop s
	join OPENQUERY (connLOKAL, 'select Artikel, IstESB from lokal') l on l.Artikel = s.ANR  
Bei <Datenbank> und <Schema> mußt Du nur noch die richtigen Werte eintragen.

Noch besser wäre es, den Verbindungsserver connLOKAL auch auf dem SQL Server mit der Tabelle "Shop" einzurichten und dann die Abfrage dort laufen zu lassen:
update	<Datenbank>.<Schema>.shop 
set	IstESBs = l.IstESB
from	<Datenbank>.<Schema>.shop s
	join OPENQUERY (connLOKAL, 'select Artikel, IstESB from lokal') l on l.Artikel = s.ANR  
Wenn das direkt in der richtigen Datenbank und im richtigen Schema läuft, dann kannst Du Dir <Datenbank>.<Schema>. auch schenken.

Zu Deiner anderen Frage: grundsätzlich ja. Für Massenimporte und -exporte gibt es das Dienstprogramm bcp, ansonsten gibt es noch sqlcmd, das ist praktisch der Query Analyzer für die Kommandozeile. Wenn die Frage auf obige Problematik abzielt, dann müßtest Du aber erst mal aus MySQL exportieren und in MSSQL importieren.

Gruß, Mad Max
Member: petere
petere Dec 02, 2014 at 17:44:30 (UTC)
Goto Top
Vielen Dank Max. Hat mir sehr geholfen.