У меня есть определенный пользователем тип таблицы и хранимая процедура, которая использует этот тип
create type dbo.ut_Type1(
Col1 varchar(10),
Col2 varchar(10),
Col3 int)
go
create procedure dbo.p_Procedure1(
@TVP ut_Type1 READONLY,
@Year int,
@ID int)
as
begin
Это вызов из клиентского приложения
var td:TMSTableData;
......
TMSQuery1.SQL.Text:='exec dbo.p_Procedure1 @TVP = :Par1, @Year = :Par2, @ID = :Par3';
TMSQuery1.ParamByName('Par1').AsTable:=td.Table;
TMSQuery1.ParamByName('Par2').AsInteger:=2019;
TMSQuery1.ParamByName('Par3').AsInteger:=4605;
Все работает нормально, за исключением одного конкретного SQLСервер.Вот выполнение из Profiler для этого сервера.( Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) Express Edition с расширенными службами (64-разрядная версия))
declare @p3 dbo.ut_Type1
insert into @p3 values('001','112',142)
exec sp_executesql N'exec dbo.p_Procedure1 @Table = @P1, @Year = @P2, @ID = @P3', N'@P1 dbo.ut_Type1,@P2 int,@P3 int',@p3,2019,4605
И получение ошибки
"Табличный параметр @ P1 должен быть объявлен с опцией READONLY"
Я пробовал один и тот же вызов на аналогичном SQL Server (Microsoft SQL Server 2008 R2 (SP2) - 10.50.4042.0 (X64) Express Edition с расширенными службами (64-разрядная версия) .Вот выполнение из Profiler
declare @p3 dbo.ut_Type1
insert into @p3 values('001','112',142)
exec sp_executesql N'exec dbo.p_Procedure1 @Table = @P1, @Year = @P2, @ID = @P3', N'@P1 dbo.ut_Type1 READONLY,@P2 int,@P3 int',@p3,2019,4605
И не было получено ошибки.
Единственное отличие - это ключевое слово READONLY, которое отсутствует в первом табличном параметре сервера.
Есть ли какая-либо конфигурация для SQL Server, которую я должен установить?
Спасибо!