Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

EF4 - La procédure stockée sélectionnée ne renvoie aucune colonne

EF ne prend pas en charge l'importation de procédures stockées qui génèrent un ensemble de résultats à partir de :

  • Requêtes dynamiques
  • Tableaux temporaires

La raison est que pour importer la procédure EF doit l'exécuter . Une telle opération peut être dangereuse car elle peut déclencher des modifications dans la base de données. À cause de cela, EF utilise une commande SQL spéciale avant d'exécuter la procédure stockée :

SET FMTONLY ON

En exécutant cette commande, la procédure stockée renverra uniquement des "métadonnées" sur les colonnes de son jeu de résultats et n'exécutera pas sa logique. Mais comme la logique n'a pas été exécutée, il n'y a pas de table temporaire (ou de requête dynamique construite), donc les métadonnées ne contiennent rien.

Vous avez deux choix (sauf celui qui nécessite de réécrire votre procédure stockée pour ne pas utiliser ces fonctionnalités) :

  • Définissez manuellement le type complexe renvoyé (je suppose que cela devrait fonctionner)
  • Utilisez un hack et juste pour ajouter la procédure stockée mise à son début SET FMTONLY OFF . Cela permettra au reste du code de votre SP de s'exécuter normalement. Assurez-vous simplement que votre SP ne modifie aucune donnée car ces modifications seront exécutées lors de l'importation ! Une fois l'importation réussie, supprimez ce hack.