sql >> Databasteknik >  >> RDS >> Sqlserver

EF4 - Den valda lagrade proceduren returnerar inga kolumner

EF stöder inte import av lagrade procedurer som bygger resultatuppsättning från:

  • Dynamiska frågor
  • Tillfälliga tabeller

Anledningen är att för att importera proceduren måste EF köra den . Sådan operation kan vara farlig eftersom den kan utlösa vissa ändringar i databasen. På grund av det använder EF ett speciellt SQL-kommando innan det kör den lagrade proceduren:

SET FMTONLY ON

Genom att utföra detta kommando kommer den lagrade proceduren endast att returnera "metadata" om kolumner i dess resultatuppsättning och den kommer inte att exekvera sin logik. Men eftersom logiken inte kördes finns det ingen temporär tabell (eller byggd dynamisk fråga) så metadata innehåller ingenting.

Du har två val (förutom det som kräver att du skriver om din lagrade procedur för att inte använda dessa funktioner):

  • Definiera den returnerade komplexa typen manuellt (jag antar att det borde fungera)
  • Använd ett hack och bara för att lägga till den lagrade proceduren i början SET FMTONLY OFF . Detta gör att resten av din SP:s kod kan köras på normalt sätt. Se bara till att din SP inte ändrar några data eftersom dessa ändringar kommer att utföras under importen! Ta bort hacket efter lyckad import.


  1. MySQL/MariaDB - beställ efter inre underfråga

  2. Hur man korrekt skriver UTF-8-strängar i MySQL via JDBC-gränssnittet

  3. SQL Server 2008 Vertikal data till horisontell

  4. Delad funktion motsvarande i T-SQL?