Gespeicherte Prozedur übergeben Tabellennamen als parameter
Ich habe über ein halbes Dutzend generische, aber ziemlich komplexe gespeicherte Prozeduren und Funktionen, die ich verwenden möchte um in einer allgemeineren Weise.
Idealerweise möchte ich weitergeben kann der Tabellenname als ein parameter an die Prozedur, wie es derzeit ist hart codiert.
Forschung, die ich getan habe, schlägt vor, die ich brauche, um zu konvertieren alle vorhandenen SQL in meinem Verfahren, um dynamisches SQL verwenden, um splice-in der dynamischen Tabelle mit Namen aus parameter, aber ich Frage mich, ob es ist ein einfacher Weg, durch Verweis auf die Tabelle in einer anderen Art und Weise?
Beispiel:
SELECT * FROM @MyTable WHERE...
Wenn ja, wie kann ich das @MyTable variable aus der Tabelle Namen?
Ich bin mit SQL Server 2005.
- Wie/wo sind diese Tabellen erstellt oder gespeichert? Sind Sie Ergebnisse aus anderen Abfragen?
- Als marc_s gesagt, ein upgrade auf SQL 2008. Tabelle-Wert Parameter sind pure awesomeness beim Umgang mit einer großen Anzahl von updates auf eine einzige Tabelle.
- Bitte Lesen Sie seine Frage genauer. Trotz dem Frage-Titel, er versucht sich zu übergeben Sie den Namen einer Tabelle (eine Tabelle).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dynamische SQL ist der einzige Weg, dies zu tun, aber ich würde überdenken, die Architektur Ihrer Anwendung, wenn es dies erfordert. SQL ist nicht sehr gut im "Allgemeinen" code. Es funktioniert am besten, wenn es entworfen und codiert, um einzelne Aufgaben.
Auswahl aus TableA ist nicht das gleiche wie die Auswahl aus TableB, auch wenn die select-Anweisungen gleich Aussehen. Es gibt unterschiedliche Indizes, die verschiedene Tisch-Größen, die Verteilung der Daten, etc.
Könnte man erstellen Sie Ihre individuellen gespeicherten Prozeduren, die einen gemeinsamen Ansatz. Ein code-generator, erzeugt die verschiedenen gespeicherte Prozeduren auswählen für Tabellen, die Sie brauchen. Jede Tabelle hat Ihren eigenen SP(en), die Sie dann link in Ihre Anwendung.
Ich geschrieben habe, diese Arten von Generatoren in T-SQL, aber Sie konnte einfach nicht mit den meisten Programmiersprachen. Es ist ziemlich grundlegende Dinge.
Nur noch eine Sache, da Scott E gebracht ORMs... Sie sollte auch in der Lage sein, diese zu verwenden, die gespeicherte Prozeduren mit modernsten ORMs.
Müssten Sie dynamisches sql verwenden. Aber Mach das nicht! Du bist besser dran mit einem ORM.
Können Sie dynamisches Sql verwenden, aber überprüfen Sie, dass das Objekt existiert zuerst, es sei denn, Sie können 100% Vertrauen, dass die Quelle der parameter. Es ist wahrscheinlich, dass es zu einem Leistungseinbruch, da SQL server nicht in der Lage sein, wieder verwenden die gleichen execution plan) für die verschiedenen Parameter.