Подтвердить что ты не робот

Entity Framework не может обрабатывать простую переменную таблицы?

  • Последняя строка хранимой процедуры: select * from @t
  • Обновлена ​​модель, и она обнаружила хранимую процедуру
  • Попробовал импортировать новую функцию с помощью мастера, и он сказал, что никакие столбцы не могут быть найдены.

Серьезно? Кто-то говорит мне, что это лежит.

create procedure WorkIt
as
set nocount on

create table #pivot
(
    Name varchar(30),
    Value decimal,
    Grade varchar(2)
)

insert into #pivot
select 'Repeating Pct', 1, 'K'
union all
select 'Repeating Pct', 2, '1'
union all
select 'Repeating Pct', 3, '2'
union all
select 'Repeating Pct', 4, '3'
union all
select 'Repeating Pct', 5, '4'
union all
select 'Repeating Pct', 6, '5'
union all
select 'Repeating Pct', 7, '6'  
union all
select 'Repeating Pct', 8, '7'
union all
select 'Repeating Pct', 9, '8'
union all
select 'Repeating Pct', 10, '9'
union all
select 'Repeating Pct', 11, '10'
union all
select 'Repeating Pct', 12, '11'
union all
select 'Repeating Pct', 13, '12'
declare @t table
(
    name varchar(30),
    K decimal (15,5) ,
    [1] decimal (15,5),
    [10] decimal (15,5),
    [11] decimal (15,5),
    [12] decimal (15,5),
    [2] decimal (15,5),
    [3] decimal (15,5),
    [4] decimal (15,5),
    [5] decimal (15,5),
    [6] decimal (15,5),
    [7] decimal (15,5),
    [8] decimal (15,5),
    [9] decimal (15,5)
)
insert into @t
exec dbo.CrossTabWithoutSumWithOrderBy #pivot, 'Name', null, 'Grade', 'Value', 
    -- sort repeating pct to bottom
    'case name when ''Repeating Pct'' then 999 else 0 end'

drop table #pivot
select * from @t

Результат

name    K   1   10  11  12  2   3   4   5   6   7   8   9
Repeating Pct   2.00000 11.00000    12.00000    13.00000    3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.00000    1.00000
4b9b3361

Ответ 1

Когда структура сущности пытается получить столбцы из хранимой процедуры, она вызывает SET FMTONLY ON, после чего выполняет хранимую процедуру. Когда FMTONLY - ON выполнение возвращает только метаданные и не работает с некоторой расширенной конструкцией в хранимых процедурах - например, динамический SQL, временные таблицы, а также переменные таблицы.

У вас есть три варианта:

  • Как описано в другом ответе добавьте SET FMTONLY OFF в начале хранимой процедуры. Это приведет к тому, что ваша хранимая процедура будет действительно выполняться, поэтому убедитесь, что она только считывает данные - любая вставка, обновление или удаление будет выполняться каждый раз при попытке получить столбцы!
  • Вручную определить сложный тип
  • Измените хранимую процедуру, чтобы не использовать какие-либо из этих функций.