Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

EF4 - O procedimento armazenado selecionado não retorna colunas


O EF não oferece suporte à importação de procedimentos armazenados que criam o conjunto de resultados de:
  • Consultas dinâmicas
  • Tabelas temporárias

A razão é que para importar o procedimento EF deve executá-lo . Tal operação pode ser perigosa, pois pode desencadear algumas alterações no banco de dados. Por causa disso, o EF usa um comando SQL especial antes de executar o procedimento armazenado:
SET FMTONLY ON

Ao executar este comando, o procedimento armazenado retornará apenas "metadados" sobre as colunas em seu conjunto de resultados e não executará sua lógica. Mas como a lógica não foi executada, não há tabela temporária (ou consulta dinâmica construída), portanto, os metadados não contêm nada.

Você tem duas opções (exceto aquela que exige reescrever seu procedimento armazenado para não usar esses recursos):
  • Defina o tipo complexo retornado manualmente (acho que deve funcionar)
  • Use um hack e apenas para adicionar o procedimento armazenado coloque no início SET FMTONLY OFF . Isso permitirá que o restante do código do seu SP seja executado de maneira normal. Apenas certifique-se de que seu SP não modifique nenhum dado, pois essas modificações serão executadas durante a importação! Após a importação bem-sucedida, remova esse hack.