我有用户定义的表类型并使用了该类型的存储过程
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 Server之外,其他所有程序都工作正常。 这是从Profiler对该服务器的执行。 ( Microsoft SQL Server 2008 R2(SP2)-具有高级服务(64位)的10.50.4000.0(X64)Express Edition)
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设置任何配置吗?
谢谢!
答案 0 :(得分:0)
根据Microsoft文档的表参数具有以下限制: