我有以下类型:
CREATE TYPE [dbo].[locationTable] AS TABLE(
[location_id] [varchar](100) NULL,
[name] [nvarchar](100) NULL,
[address] [varchar](100) NULL,
[latitude] [varchar](100) NULL,
[longitude] [varchar](100) NULL,
[distance] [varchar](100) NULL,
[state] [varchar](100) NULL,
[sub_cat] [varchar](100) NULL,
[idCat] [varchar](100) NULL,
[icon_link] [varchar](100) NULL,
[checkinsCount] [int] NULL
)
GO
并且我将一个表作为具有上述类型的参数传递给存储过程...但我需要在我的存储过程中从该表中删除一些行,但我不断得到它无法修改.... sql总是请求将表定义为只读,在这种情况下我无法修改
答案 0 :(得分:2)
存储过程的表参数必须是只读的。 MSDN says:
请注意,声明表值参数需要READONLY关键字。
您可以通过将内容复制到本地表变量来解决这个难题。例如:
if exists (select * from sys.procedures where name = 'TestProc')
drop procedure TestProc
if exists (select * from sys.types where name = 'TestType')
drop type TestType
go
create type TestType as table (id int, name varchar(20))
go
create procedure dbo.TestProc
@par TestType readonly
as
declare @t TestType
insert @t select * from @par
delete @t where id = 2
select * from @t
go
declare @p1 TestType
insert @p1 values (1,'a'), (2,'b'), (3,'c');
exec dbo.TestProc @p1