Я создал хранимую процедуру, которая проверяет определенные столбцы, учитывая таблицу в качестве параметра, и решил использовать Cursor. Но я получаю эту ошибку при извлечении курсора при попытке выполнить хранимую процедуру.
Я уже дважды проверил столбцы, и это соответствует количеству переменных в списке INTO. Я попытался изменить хранимую процедуру, написав это
SELECT Lot, ItemId, PO, Status, ErrorDetails
FROM Table1
вместо
SELECT @SQLSTATEMENT
после
SET @MyCursor = CURSOR FOR
и работает нормально. Но я хочу, чтобы исходная таблица была параметром, поэтому у меня это не сработает. Есть идеи?
CREATE PROCEDURE [dbo].[ValidateData]
@TABLENAME_PARAM NVARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MyCursor CURSOR;
DECLARE @CustomerLot NVARCHAR(100),
@DeviceName NVARCHAR(100),
@PO NVARCHAR(100),
@Status NVARCHAR(1),
@ErrorDetails NVARCHAR(250);
DECLARE @TABLENAME NVARCHAR(100);
DECLARE @SQLSTATEMENT AS NVARCHAR(MAX);
SELECT @TABLENAME = Quotename (TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @TABLENAME_PARAM
SET @SQLSTATEMENT = 'Select Lot, ItemId, PO, Status, ErrorDetails FROM ' + @TABLENAME + ' WHERE Status = ''N'''
BEGIN
SET @MyCursor = CURSOR FOR
SELECT @SQLSTATEMENT
OPEN @MyCursor
FETCH NEXT FROM @MyCursor INTO @CustomerLot, @DeviceName, @PO, @Status, @ErrorDetails
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRAN
--some validations here
COMMIT TRAN
FETCH NEXT FROM @MyCursor INTO @CustomerLot, @DeviceName, @PO, @Status, @ErrorDetails
END;
CLOSE @MyCursor;
DEALLOCATE @MyCursor;
END
END
GO