sql >> Base de Datos >  >> RDS >> Sqlserver

EF4:el procedimiento almacenado seleccionado no devuelve columnas

EF no admite la importación de procedimientos almacenados que crean un conjunto de resultados de:

  • Consultas dinámicas
  • Mesas temporales

El motivo es que para importar el procedimiento EF debe ejecutarlo . Tal operación puede ser peligrosa porque puede desencadenar algunos cambios en la base de datos. Debido a eso, EF usa un comando SQL especial antes de ejecutar el procedimiento almacenado:

SET FMTONLY ON

Al ejecutar este comando, el procedimiento almacenado devolverá solo "metadatos" sobre las columnas en su conjunto de resultados y no ejecutará su lógica. Pero debido a que la lógica no se ejecutó, no hay una tabla temporal (o una consulta dinámica creada), por lo que los metadatos no contienen nada.

Tiene dos opciones (excepto la que requiere volver a escribir su procedimiento almacenado para no usar estas funciones):

  • Defina el tipo complejo devuelto manualmente (supongo que debería funcionar)
  • Usar un truco y solo para agregar el procedimiento almacenado puesto al principio SET FMTONLY OFF . Esto permitirá que el resto del código de su SP se ejecute de manera normal. ¡Solo asegúrese de que su SP no modifique ningún dato porque estas modificaciones se ejecutarán durante la importación! Después de una importación exitosa, elimine ese truco.