Я использую SQL 2008 и EF У меня есть следующий сохраненный процесс для массовой вставки
CREATE Type [dbo].[xxx] as Table (
[ErrorCode] [nvarchar](10),
[ErrorMessage] [nvarchar](300),
[FieldName] [nvarchar](50),
[FieldLable] [nvarchar](300),
)
CREATE procedure dbo.InsertAll(@Records xxx READONLY)
as
begin
insert into dbo.MyTable
select * from @Records;
end;
go
Я передаю Datatable как параметр (Type = структурированный), который имеет несколько записей. Этот процесс работает при вызове с использованием SQLCommand.ExecuteNonQuery, но ничего не делает при вызове с использованием contextObject.ExecuteStoreCommand.Возвращаемое значение = затронутые строки всегда 0
Что не так?такие процедуры не поддерживаются EF?Я даже не получаю никаких исключений: (* 1006 *
Обновление: после запуска трассировки SQL только что понял разницу в генерируемых операторах SQL
При использовании contextObject.ExecuteStoreCommand
declare @p3 dbo.xxx
insert into @p3 values(N'M',N'ErrorMsg - 0',NULL,NULL)
insert into @p3 values(N'M',N'ErrorMsg - 1',NULL,NULL)
insert into @p3 values(N'M',N'ErrorMsg - 2',NULL,NULL)
exec sp_executesql N'InsertAll',N'@Records [xxx]
READONLY',@Records=@p3
При использовании SQLCommand.ExecuteNonQuery
declare @p1 dbo.xxx
insert into @p1 values(N'M',N'ErrorMsg - 0',NULL,NULL)
insert into @p1 values(N'M',N'ErrorMsg - 1',NULL,NULL)
insert into @p1 values(N'M',N'ErrorMsg - 2',NULL,NULL)
exec InsertAll @Records=@p1
Как получить contextObject.ExecuteStoreCommand для выполнения того же SQL-запроса, что и SQLCommand.ExecuteNonQuery?