Как удалить запись из параметра, имеющего значение в таблице?

#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. Я провел некоторое тестирование и, да, именно так это и работает. Спасибо!