【发布时间】:2019-10-06 09:49:55
【问题描述】:
我创建了一个存储过程,它验证给定表作为参数的某些列,并决定使用 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
【问题讨论】:
标签: sql-server cursor