Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8394783
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T20:08:36+00:00 2026-06-09T20:08:36+00:00

Possible Duplicate: Stored procedure without cursors How can I write the following sp without

  • 0

Possible Duplicate:
Stored procedure without cursors

How can I write the following sp without the cursor?. More over its not giving me the desired output. I didn’t write this, I am trying to interpret what is wrong with this.

ALTER PROCEDURE [dbo].[AccreditationExpiryCheck]
AS
BEGIN
    SET NOCOUNT ON;

    declare @taskTypeId int = 19 -- Accreditations, automated
    declare @firstActionTypeId int = 23 -- Accreditation expiring
    declare @nextActionTypeId int = 3 -- Call company

    declare @companyId int
    declare @accreditationId int
    declare @comment nvarchar(max) = N' accreditation for this company has expired.'

    -- find all companies and accreditations expiring
    declare companies cursor local forward_only read_only for 
        select c.Company_Id, a.Accred_ID
        from COMPANY c
            inner join MEMBERSHIP m on c.Company_ID = m.Company_ID
            inner join ACCREDITATION a on c.Company_ID = a.Company_ID
        where
            -- Accreditation expired yesterday
            cast(a.Accred_ExpDate as DATE) = cast(DATEADD(DAY, -1, GETDATE()) as DATE)
            and m.IsMember_Ind = 1
            and (c.HQ_ID IS NULL OR c.HQ_ID = c.Company_ID)  -- FB4640: this isn't a 'team' co (with an HQ)
            -- and there is no action of this type created within 1 day
            -- of the expiry date
            and not exists (
                select * from TaskAction ta where
                    ta.FirstActionTypeId = @firstActionTypeId and
                    ta.TaskTypeId = @taskTypeId and
                    ta.TaskCreatedOn BETWEEN a.Accred_ExpDate AND DATEADD(DAY, 1, a.Accred_ExpDate) and
                    ta.EntityId = c.Company_ID and 
                    ta.EntityTypeId = 1 )

    open companies

    fetch next from companies into @companyId, @accreditationId

    declare @title nvarchar(max) = 
        (select AccredType_Name from ACCREDITATION_TYPE at 
        inner join ACCREDITATION a on at.AccredType_ID = a.AccredType_ID
        where a.Accred_ID = @accreditationId)

    declare @comment2 nvarchar(max) = isnull(@title, '') + ' accreditation for this company has expired.'
    while @@FETCH_STATUS = 0
    begin
        exec CreateSystemTask 
            @taskTypeId, 
            @firstActionTypeId,
            @nextActionTypeId,
            @companyid,
            @comment2,
            @title

        fetch next from companies into @companyId,@accreditationId
    end

    close companies
    deallocate companies
END

The following select statement from the above sp gives me the correct dataset, but the cursor which loops through gives me a different output.

select c.Company_Id, a.Accred_ID
        from COMPANY c
            inner join MEMBERSHIP m on c.Company_ID = m.Company_ID
            inner join ACCREDITATION a on c.Company_ID = a.Company_ID
        where
            -- Accreditation expired yesterday
            cast(a.Accred_ExpDate as DATE) = cast(DATEADD(DAY, -1, GETDATE()) as DATE)
            and m.IsMember_Ind = 1
            and (c.HQ_ID IS NULL OR c.HQ_ID = c.Company_ID)  -- FB4640: this isn't a 'team' co (with an HQ)
            -- and there is no action of this type created within 1 day
            -- of the expiry date
            and not exists (
                select * from TaskAction ta where
                    ta.FirstActionTypeId = @firstActionTypeId and
                    ta.TaskTypeId = @taskTypeId and
                    ta.TaskCreatedOn BETWEEN a.Accred_ExpDate AND DATEADD(DAY, 1, a.Accred_ExpDate) and
                    ta.EntityId = c.Company_ID and 
                    ta.EntityTypeId = 1 )
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T20:08:37+00:00Added an answer on June 9, 2026 at 8:08 pm

    You can get rid of the cursor with a while loop as illustrated below. If the data you are querying included a unique identifier you could do away with the temp table but for your example I used a temp table and included a recordId.

    ALTER PROCEDURE [dbo].[AccreditationExpiryCheck] 
    AS 
    BEGIN 
        SET NOCOUNT ON; 
    
        declare @taskTypeId int = 19 -- Accreditations, automated 
        declare @firstActionTypeId int = 23 -- Accreditation expiring 
        declare @nextActionTypeId int = 3 -- Call company 
    
        declare @companyId int 
        declare @accreditationId int 
        declare @comment nvarchar(max) = N' accreditation for this company has expired.'
    
        -- find all companies and accreditations expiring 
        select ROW_NUMBER() OVER(ORDER BY c.Company_Id, a.Accred_ID) as [RecordId], c.Company_Id as [Company_Id], a.Accred_ID as [Accred_ID]
        into #COMPANIES
            from COMPANY c 
                inner join MEMBERSHIP m on c.Company_ID = m.Company_ID 
                inner join ACCREDITATION a on c.Company_ID = a.Company_ID 
            where 
                -- Accreditation expired yesterday 
                cast(a.Accred_ExpDate as DATE) = cast(DATEADD(DAY, -1, GETDATE()) as DATE) 
                and m.IsMember_Ind = 1 
                and (c.HQ_ID IS NULL OR c.HQ_ID = c.Company_ID)  -- FB4640: this isn't a 'team' co (with an HQ) 
                -- and there is no action of this type created within 1 day 
                -- of the expiry date 
                and not exists ( 
                    select * from TaskAction ta where 
                        ta.FirstActionTypeId = @firstActionTypeId and 
                        ta.TaskTypeId = @taskTypeId and 
                        ta.TaskCreatedOn BETWEEN a.Accred_ExpDate AND DATEADD(DAY, 1, a.Accred_ExpDate) and 
                        ta.EntityId = c.Company_ID and  
                        ta.EntityTypeId = 1 )
    
        declare @recordId int = 0;
        declare @title nvarchar(max);
        declare @comment2 nvarchar(max);
    
        while(1=1)
            begin
                select top 1 @recordId = [RecordId]
                            ,@companyId = [CompanyId]
                            ,@accreditationId = [Accred_ID]
                from #COMPANIES
                where [RecordId] > @recordId
    
                if @@ROWCOUNT = 0 break;
    
                set @title =  
                    (select AccredType_Name from ACCREDITATION_TYPE at  
                    inner join ACCREDITATION a on at.AccredType_ID = a.AccredType_ID 
                    where a.Accred_ID = @accreditationId) 
    
                set @comment2 = isnull(@title, '') + ' accreditation for this company has expired.' 
    
                    exec CreateSystemTask  
                        @taskTypeId,  
                        @firstActionTypeId, 
                        @nextActionTypeId, 
                        @companyid, 
                        @comment2, 
                        @title        
            end 
    
        drop table #COMPANIES 
    END 
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Possible Duplicate: SQL Server UDF refresh The system stored procedure sp_refreshview can be used
I'm not optimistic that this can be done without a stored procedure, but I'm
Possible Duplicate: SQL Server Full text Index SQL Server stored procedure parameter output I
Possible Duplicate: dynamic sql pivot in sql server How to alter this stored procedure
Possible Duplicate: Can a Bash script tell what directory it's stored in? Is there
Possible Duplicate: In C# , how can I read a connection string stored in
Possible Duplicate: Using regular expression within a stored procedure I need to validate a
Possible Duplicate: need help with some stored procedure plz ERROR:- A SELECT statement that
Possible Duplicate: Spring's Stored Procedure - results coming back from procedure always empty. I
Possible Duplicate: Where are static variables stored in asp.net aspx page Hi can someone

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.