我有一个存储过程,有4个参数作为表(通常创建为用户定义的表类型)和sql管理工作室强制声明为READ ONLY,但我想传递此参数,我想做更新(我已经为它声明了一些空字段)某些行,有人可以帮助我吗?
@TEMP as TEMP READONLY
The table-valued parameter "@TEMP" must be declared with the READONLY option.
感谢。
答案 0 :(得分:1)
抱歉,他们是READONLY
。期。
CREATE TYPE dbo.Integers AS TABLE(id INT PRIMARY KEY);
GO
CREATE PROCEDURE dbo.ProcessIntegers
@x dbo.Integers READONLY
AS
BEGIN
SET NOCOUNT ON;
DECLARE @y dbo.Integers;
INSERT @y SELECT id FROM @x;
UPDATE @y SET id += 1;
SELECT id FROM @y;
END
GO
DECLARE @z dbo.Integers;
INSERT @z VALUES(1),(2);
EXEC dbo.ProcessIntegers @x = @z;
虽然还有一个额外的数据副本,但这仍然为您提供了首先传递TVP的好处,和允许您操作它。
想了解更多有关变通方法的背景知识和更多详细信息吗?阅读this article by Erland Sommarskog,可能还有this one too。
哦,请评论并投票支持此Connect项目,要求能够针对TVP执行DML:
Connect #299296 : Relax restriction that table parameters must be readonly when SPs call each other