Dynamisch Ändern, welche Tabelle zur Auswahl mit SQL CASE-Anweisung
Ich versuche eine gespeicherte Prozedur schreiben, und je nach einer bestimmten Spalte Wert, ich möchte in der Lage sein, zu ändern, was Tabelle wähle ich aus. Ich werde versuchen, ein Beispiel zu geben:
SELECT ItemNumber,
ItemType,
Description
FROM
CASE ItemType
WHEN 'A' THEN TableA
ELSE TableB
END
WHERE
CASE ItemType
WHEN 'A' THEN ItemNumber = @itemNumber
ELSE PartNumber = @itemNumber
END
Wie Sie sehen können, bin nicht nur ich, sich dynamisch verändernden Tabelle wähle ich aus, aber da diese beiden Tische wurden zu zwei verschiedenen Zeitpunkten von zwei verschiedenen Personen, die Spaltennamen sind auch unterschiedlich.
So, meine Frage ist: Was ist der beste Weg, dies zu erreichen, da der SQL Server scheint nicht, wie meine Abfrage, die ich konstruiert haben.
Wenn wer sieht, was ich versuche zu tun, können Sie vorschlagen, eine bessere Möglichkeit, dies zu tun, wäre ich ganz Ohr 🙂
- Während die Menschen in der Regel davon ausgehen, dass "SQL Server" == "MS SQL Server", es ist besser, wenn Sie diese klären in der Frage und in den tags. Ich ändere die tags, zurückzukehren, wenn ich falsch Liege.
- sqlserver ist der tag für Microsoft SQL Server. Es gibt derzeit kein anderes Produkt mit diesem Namen, und es ist die einzig sinnvolle tag auf SO für es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht use-CASE-Anweisung in der FROM-Klausel, aber Sie können verwenden Sie den folgenden statt:
Könnten Sie versuchen, die dynamic SQL-Anweisung als string und dann den Aufruf von sp_executesql gespeicherten Prozedur ausführen die Zeichenfolge.
Sehen hier für weitere Informationen und Beispiele.
Ich bin mir nicht sicher, warum Sie wollen, Dinge zu tun, die in einer SQL-Anweisung .. ich bin kein SQL-Server-person, aber in einer Oracle-gespeicherte Prozedur, die Sie schreiben, könnte so etwas wie dieses
Sollte sowas in SQL Server auch .. vielleicht könnte ja mal jemand näher erläutern?
Ihnen wirklich nicht erklären, wo
ItemType
kommt. Wie vorgeschlagenUNION
könnte zutreffend sein, wenn Sie einfach nur die Kombination von zwei Tabellen.Hier ist eine andere Möglichkeit, die auch beziehen können, um Ihr problem:
Sind Sie besser mit UNION-Abfrage, die Tabellen zu verknüpfen zuerst, und dann WÄHLEN Sie.
Außerdem können Sie prüfen, erstellen einer Ansicht für eine der Tabellen, so zieht es nur die Spalten, die Sie benötigen, während Sie umbenennen, dann UNION, und wählen Sie dann aus der UNION.
Oder verwenden Sie eine temporäre Tabelle zum speichern des Ergebnisses von jeder Abfrage. Setzen Sie die Erstellung von temporären Tabellen in einem FALL (pseudocode, nicht getestet):