sql >> Database >  >> RDS >> Sqlserver

EF4 - De geselecteerde opgeslagen procedure retourneert geen kolommen

EF biedt geen ondersteuning voor het importeren van opgeslagen procedures die een resultaatset bouwen van:

  • Dynamische zoekopdrachten
  • Tijdelijke tabellen

De reden is dat om de procedure te importeren EF deze moet uitvoeren . Een dergelijke operatie kan gevaarlijk zijn omdat het enkele wijzigingen in de database kan veroorzaken. Daarom gebruikt EF een speciaal SQL-commando voordat het de opgeslagen procedure uitvoert:

SET FMTONLY ON

Door deze opdracht uit te voeren, zal de opgeslagen procedure alleen "metadata" over kolommen in zijn resultatenset retourneren en zal zijn logica niet uitvoeren. Maar omdat de logica niet is uitgevoerd, is er geen tijdelijke tabel (of ingebouwde dynamische query), dus metagegevens bevatten niets.

Je hebt twee keuzes (behalve degene die je opgeslagen procedure opnieuw moet schrijven om deze functies niet te gebruiken):

  • Definieer het geretourneerde complexe type handmatig (ik denk dat het zou moeten werken)
  • Gebruik een hack en voor het toevoegen van de opgeslagen procedure aan het begin SET FMTONLY OFF . Hierdoor kan de rest van de code van uw SP op de normale manier worden uitgevoerd. Zorg er wel voor dat uw SP geen gegevens wijzigt, want deze wijzigingen worden uitgevoerd tijdens het importeren! Verwijder die hack na succesvolle import.


  1. (+) =operator in oracle sql in where-clausule

  2. Moet de tijdzone van MySQL worden ingesteld op UTC?

  3. Is het mogelijk om toegang te krijgen tot een .mdf-database zonder SQL Server?

  4. Topfouten die moeten worden vermeden bij MySQL-replicatie