Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

EF4 - Die ausgewählte gespeicherte Prozedur gibt keine Spalten zurück

EF unterstützt nicht das Importieren gespeicherter Prozeduren, die Ergebnissätze erstellen aus:

  • Dynamische Abfragen
  • Temporäre Tabellen

Der Grund dafür ist, dass zum Importieren der Prozedur EF sie ausführen muss . Eine solche Operation kann gefährlich sein, da sie einige Änderungen in der Datenbank auslösen kann. Aus diesem Grund verwendet EF einen speziellen SQL-Befehl, bevor es die gespeicherte Prozedur ausführt:

SET FMTONLY ON

Durch Ausführen dieses Befehls gibt die gespeicherte Prozedur nur "Metadaten" über Spalten in ihrer Ergebnismenge zurück und führt ihre Logik nicht aus. Da die Logik jedoch nicht ausgeführt wurde, gibt es keine temporäre Tabelle (oder erstellte dynamische Abfrage), sodass Metadaten nichts enthalten.

Sie haben zwei Möglichkeiten (mit Ausnahme derjenigen, bei der Ihre gespeicherte Prozedur neu geschrieben werden muss, um diese Funktionen nicht zu verwenden):

  • Definieren Sie den zurückgegebenen komplexen Typ manuell (ich denke, es sollte funktionieren)
  • Verwenden Sie einen Hack und nur zum Hinzufügen der gespeicherten Prozedur, die an den Anfang gestellt wird SET FMTONLY OFF . Dadurch kann der restliche Code Ihres SP normal ausgeführt werden. Stellen Sie nur sicher, dass Ihr SP keine Daten ändert, da diese Änderungen während des Imports ausgeführt werden! Entfernen Sie nach erfolgreichem Import diesen Hack.