2013-11-28 3 views
1

я иметь следующий вид:падение строки в определенном пользователем типа таблицы

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 всегда запрашивает определение таблицы как только для чтения, и в этом случае я не могу изменить

+1

извините, но вопрос не достаточно ясно, чтобы быть asnwered – Dhaval

+0

Название говорит: «Столбцы» и описание гласит: «удалить некоторые строки». Который из них? – Raj

ответ

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 
Смежные вопросы