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
12 голосов | спросил O.O 13 Maypm11 2011, 23:48:51

2 ответа


0

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

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

  • Как описано в другом ответе добавьте SET FMTONLY OFF в начале вашей хранимой процедуры. Это заставит вашу хранимую процедуру действительно выполняться, поэтому убедитесь, что она только читает данные - любая вставка, обновление или удаление будут выполняться каждый раз, когда вы пытаетесь получить столбцы!
  • Определить сложный тип вручную
  • Измените свою хранимую процедуру, чтобы не использовать эти функции
ответил Ladislav Mrnka 14 Mayam11 2011, 00:09:09
0

У меня была похожая проблема с edmx (в моем случае это было утверждение if else), был обходной путь. Перед обновлением edmx: Объявите некоторые переменные вашего типа возврата, выберите их. Обновите модель, затем измените вашу хранимую процедуру с вашим реальным кодом. то есть: Объявить объявить @name varchar (30),     @ K десятичный (15,5),     @ x1 десятичный (15,5),     @ x10 десятичный (15,5),     @ x11 десятичный (15,5),     @ x12 десятичный (15,5),    @ x2 десятичный (15,5),     @ x3 десятичный (15,5),     @ x4 десятичный (15,5),     @ x5 десятичный (15,5),    @ x6 десятичный (15,5),     @ x7 десятичный (15,5),     @ x8 десятичный (15,5),     @ x9 десятичный (15,5)

Выберите @name, @k, @ x1, @ x10, @ x11, @ x12, @ x2, @ x3, @ x4, @ x5, @ x6, @ x7, @ x8, @ x9

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

ответил Ola Mohammad Arafat 8 J0000006Europe/Moscow 2018, 20:15:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132