#sql #sql-server #tsql #sql-server-2008 #stored-procedures
#sql #sql-сервер #tsql #sql-server-2008 #хранимые процедуры
Вопрос:
Я хотел бы знать, как удалить значение из параметра с табличным значением в SQL? Возможно ли это вообще? Если нет, то каким было бы обходное решение?
Пожалуйста, посмотрите мой код ниже и обратите внимание на комментарии. В разделе комментариев я хотел бы вставить строку, которая позволила бы мне удалить запись из TVP @Record_NumList
Как только эта запись удалена, я затем продолжаю вставлять новую (в принципе, я не хочу выполнять хранимую процедуру для существующей записи).
DECLARE @RecordID int
DECLARE @RecordID_NumList as Le_NumberList
DECLARE cur_DelRec CURSOR
FOR
SELECT DBRecordID from <<table_name>>
OPEN cur_DelRec
FETCH NEXT from cur_DelRec into @RecordID
INSERT into @RecordID_NumList(@RecordID)
WHILE @@FETCH_STATUS = 0
BEGIN
exec <<stored_procedure>> @RecordID_NumList
/* I'm stuck here: */
/* Need to remove from the existing record
from @RecordID_NumList */
FETCH NEXT FROM cur_DelRec into @RecordID
INSERT into @RecordID_NumList(@RecordID)
END
CLOSE cur_DelRec
DEALLOCATE cur_DelRec
На более общем уровне, является ли TVP коллекцией? Допустим, я решил не удалять ее из @Record_NumList. Что произойдет в этом случае?
Прошу прощения, но я все еще изучаю SQL и буду признателен за любую помощь!
Ray
Комментарии:
1.
DELETE FROM @RecordID_NumList
?2. Ради всего святого, не используйте курсоры и циклы! Со всей серьезностью, если вы можете переписать это, чтобы оно было декларативным, оно будет работать намного лучше.
Ответ №1:
Параметры с табличным значением работают точно так же, как обычная таблица. Вы должны быть в состоянии просто сделать что-то вроде этого:
delete from @Record_numList where [field] = [value]
Комментарии:
1. Я провел некоторое тестирование и, да, именно так это и работает. Спасибо!