Gespeicherte SQL Server-Prozedur-Frage eine andere gespeicherte Prozedur aufrufen
Hier ein habe ich ein Problem mit einer stored procedure (SQL Server 2005), in der diese gespeicherte Prozedur ruft eine andere gespeicherte Prozedur, wenn die Daten in eine temporäre Tabelle.
INSERT INTO #tmpTable (Column1, Column2, Column3)
EXEC psp_rptInsideStoredprocedure 2
Diese im inneren gespeicherte Prozedur einen parameter mode, der bestimmt, welche Spalten übergeben bekommen. In diesem Modus (Mode2) nur 3 Spalten Holen Sie sich übergeben, wenn diese innerhalb der gespeicherten Prozedur ist für einen anderen Bericht (Mode1) 4 Spalten übergeben bekommt. Manchmal sind die Eltern gespeicherte Prozedur beschwert sich über das versuchen, stecken Sie die 4 Spalte und manchmal nicht.
Ich weiß, es ist stets in mode 2, aber es ist wie SQL Server weiß, dass manchmal diese gespeicherte Prozedur übergeben hat, wieder 4 Spalten.
Irgendwelche Gedanken auf eine Lösung?
Dank
Don
Ist die temporäre Tabelle gelöscht wird zwischen den aufrufen auf der gleichen Sitzung?
InformationsquelleAutor | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen, dass das Kind die Prozedur immer wieder die gleiche Anzahl und Typ der Spalten, verwenden Sie NULL, wenn nötig. Wenn die Ergebnisse sind so unterschiedlich für die beiden Versionen, dass Sie nicht verbinden Sie, wie diese, sollten Sie erwägen, zwei verschiedene Verfahren.
Ich kann nur raten, bei Ihrer Vorgehensweise, aber Sie können eine #ResultSet temp-Tabelle und füllen es, basierend auf Ihrem Typ-parameter, sondern immer alle Spalten zurückzugeben, etc. Wenn Sie zurückkehren, viele der Zeilen dieses wird schlecht, da die temp-Tabelle ist overhead. in diesem Fall, so stellen Sie sicher, dass Ihre Ergebnismengen zurückgeben, die die gleiche Anzahl von Spalten:
Dann, wenn beide Eltern es nennen, akzeptieren Sie alle Spalten, aber Sie können ignorieren, was Sie nicht brauchen.
InformationsquelleAutor KM.
Daisy-chaining von gespeicherten Prozeduren ist in der Regel keine gute Idee. Würde ich entfernen Sie den Aufruf der sproc und geben Sie die t-sql für genau das, was Sie brauchen. Wenn Ihr wirklich auf set zum aufrufen von anderen sproc. Eine neue sproc, das genau das tut, was Sie brauchen für diese eine situation.
Es ist alles über die Prinzip Der Einzigen Verantwortung
Ich bin nicht einverstanden. Erstellen gezielte separate sprocs, dass eine bestimmte Sache gut, ist genau das, was der SRP.
InformationsquelleAutor DBAndrew