This error is popping up when I try to call a specific stored procedure in SQL2005. The error is not specific to ASP.NET code because it also occurs if I try to run the procedure in SQL Server Management Studio. The procedure is exactly the same that is running on an SQL2000 server on a live site, so it apparently is specific to SQL2005.
I have not worked much with SQL2005 or SQL cursors in the past and this code was not written by me so I am not sure where to start making changes, if any are needed.
The procedure is as follows:
ALTER PROCEDURE [dbo].[spGetAdmins]
@.userid int,
@.forDate datetime
AS
DECLARE @.lngTabCount INTEGER,
@.lngLoopCount INTEGER,
@.type varchar(15),
@.id varchar(20),
@.statement varchar(1000),
@.useridLocal int,
@.forDateLocal datetime
SET @.useridLocal = @.userid
SET @.forDateLocal = @.forDate
DECLARE @.AdminInfo TABLE (AdminID varchar(20), AdminName varchar(50))
/* check parameters */
IF (@.useridLocal <= 0)
BEGIN
RAISERROR( 'Invalid UserID (%d)', 16, 1, @.useridLocal )
END
IF (@.forDateLocal IS NULL)
BEGIN
SELECT @.forDateLocal = GETDATE()
END
DECLARE profInfo CURSOR
LOCAL FORWARD_ONLY
FOR
SELECT ProfileType, ProfileValue
FROM tblCSUserProfile
WHERE UserID = @.useridLocal and
(StartDate is not null or StartDate <= @.forDateLocal ) and
(EndDate is null or EndDate > @.forDateLocal )
ORDER BY ProfileType
OPEN profInfo
FETCH profInfo
INTO @.type, @.id
WHILE @.@.Fetch_Status = 0
BEGIN
IF @.id = '*'
BEGIN
INSERT INTO @.AdminInfo
VALUES ('*', '* Everything')
END
ELSE
BEGIN
INSERT INTO @.AdminInfo
SELECT adm.[ADM_CODE], adm.[ADMIN_NAM]
FROM OPENROWSET('SQLOLEDB', 'server'; 'database'; 'password', [table]) AS adm
WHERE adm.[ADM_CODE] = @.id
END
FETCH profInfo INTO @.type, @.id
END
CLOSE profInfo
DEALLOCATE profInfo
SELECT DISTINCT(UPPER(AdminID)) AS AdminCode
FROM @.AdminInfo
GROUP BY AdminID
ORDER BY AdminCode
(1) I would change the line
FETCH profInfo
INTO @.type, @.id
to
FETCH NEXT FROM profInfo INTO @.type, @.id
and
FETCH profInfo INTO @.type, @.id
to
FETCH NEXT FROM profInfo INTO @.type, @.id
I would also recommend using a table variable instead of cursors.
(2) Check out the syntax for OPENROWSET in BOL.
Try using the SQLNCLI (SQL Native Client) instead of SQLOLEDB and see if it makes a difference.
No comments:
Post a Comment