2017-03-14 3 views
0

Noob SQL Frage hier aktualisiert. Ich habe eine Datenbank in SQL Server 2012 und Zugriff auf eine andere MySQL-Datenbank mit Informationen, die ich gerne ziehen würde.SQL Server eine Spalte in einer Tabelle mit Spalte von einer anderen

würde Ich mag eine Spalte aktualisieren Mengen einer Workstation darstellt, und dass die Informationen, die auf der anderen Datenbank. Ich möchte eine Abfrage strukturieren, die die Mengen aller Artikel aktualisiert, in denen die Modellnummern in jeder Datenbank übereinstimmen.

Ich werde zwei select-Anweisungen enthalten zeigen, was ich arbeiten möchte.

Die Daten aus der anderen Datenbank will ich von ziehen.

SELECT * 
FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model'' 
FROM workstation 
GROUP BY BuildDriver') 

, die dieses Ergebnis

enter image description here

Meine Datenbank erzeugt, die Ich mag würde zu aktualisieren.

SELECT NumOfDevices, Model 
FROM dbo.Currency 
INNER JOIN dbo.SubCategory 
ON Currency.SubCategoryId = SubCategory.SubCategoryId 
WHERE SubCategory.SubCategoryName = 'WorkStation'; 

, die dieses Ergebnis

in meiner Datenbank aktualisiert werden um sicherzustellen, dass Modellnamen zu machen einander entsprechen, aber in der Zwischenzeit

enter image description here

Die Modelle produziert ich möchte testen, eine Abfrage mit der M93z. Was wäre also der idealste Weg, um NumofDevices in meiner Datenbank zu aktualisieren, indem ich # Workstations in der anderen Datenbank verwende, wo die Modellnamen gleich sind?

Sorry, wenn dies eine offensichtliche Frage ist, bin ich immer noch ein SQL-Noob und es ist mir noch nicht intuitiv, wenn es um diese Art von Dingen kommt.

EDIT: Das Endziel ist routinemäßig alle Workstation Mengen routinemäßig über einen SQL Server Agent geplanten Job zu aktualisieren, aber ich überquere diese Brücke, wenn ich dazu komme (ich habe tatsächlich ein gewisses Vertrauen, dass ich mich bewerben kann) die Abfrage Lösung für diesen Job, sobald es herausgefunden wird), aber ich möchte diese Informationen für den Fall, dass es irgendwelche Ihrer Vorschläge ändert.

Antwort

1

Sie können join in der update Anweisung verwenden.

with newvals as (
     SELECT * 
     FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model'' 
FROM workstation 
GROUP BY BuildDriver' 
        ) oq 
    ) 
update c 
    set NumOfDevices = newvals.num_workstations 
    from dbo.Currency c join 
     dbo.SubCategory sc 
     on c.SubCategoryId = sc.SubCategoryId join 
     newvals 
     on newvals.model = c.model 
where sc.SubCategoryName = 'WorkStation'; 

Hinweis: Dies aktualisiert Werte bereits in der Tabelle. Vielleicht möchten Sie merge verwenden, wenn Sie auch neue Zeilen hinzufügen möchten. Wenn dies der Fall ist, stellen Sie eine andere Frage, da es sich hier speziell um eine Aktualisierung handelt.

+0

Schön, ich werde dies für eine Probefahrt nehmen, wenn ich vom Mittagessen zurück bin. Und nein, ich werde nicht versuchen, neue Zeilen oder irgendetwas hinzuzufügen, so dass es aussieht, als ob Sie meine Frage direkt angesprochen hätten. Ich danke dir sehr! – David

+0

Das funktionierte perfekt, abgesehen davon, dass einige Spaltennamen geändert wurden. Danke nochmal. – David

Verwandte Themen