Я хочу удалить строки в соответствии с номером строки, переданной из WinForm. Конечно, вывод вычисления ROW_NUMBER()
всегда будет обновляться при удалении строки, поэтому число строк тоже изменится, поэтому я хочу сделать это одним выстрелом, а не циклом.Удаление нескольких строк на основе номеров строк
У меня есть этот код:
CREATE PROCEDURE Delete_Record (@RowNum INT)
AS
;WITH REC_ROW AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [Record Number]) AS RN
FROM User_Data
)
DELETE
FROM REC_ROW
WHERE RN IN (@RowNum)
И когда я типа:
exec Delete_Record @RowNum = '1,2'
Он производит ошибку:
Error converting data type varchar to int.
Если изменить @RowNum INT
к @RowNum varchar(max)
, это просто выдает сообщение об ошибке:
Error converting data type varchar to bigint.
Когда я жестко закодировать значения:
;WITH REC_ROW AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY [Record Number]) AS RN
FROM User_Data
)
DELETE
FROM REC_ROW
WHERE RN IN (1,2)
Он успешно удалить строку 1 и 2. Вопрос заключается в том, как я могу интегрировать это в хранимой процедуре и ввода '1,2'
передать к статье IN
?
где я должен поставить часть CREATE TYPE dbo.Integers? Должно ли оно находиться внутри части «Создать процедуру»? Я попробовал, и он говорит о некорректном синтаксисе рядом с '('. –
@ CaressCastañares, запускает его как отдельную отдельную команду. Он устанавливает «тип» параметра таблицы: 'dbo.Integers', который затем используется в вашей процедуре. –
@Caress no, вы создаете TYPE * один раз *, а не внутри хранимой процедуры. Рассмотрим его эквивалентно созданию таблицы. –