简体   繁体   中英

How i can use cursor to delete record from table

I want to use cursor to delete record from table. How can I do it?

I use MSSQL 2008 Express this code does not delete anything from #temp. I also tried where current of cursor_name did not work.

Here is my sample code:

use AdventureWorks

drop table #temp
select * into #temp from HumanResources.Employee;

declare @eid as int;
declare @nid as varchar(15);


DECLARE Employee_Cursor CURSOR FOR
SELECT A.EmployeeID, A.NationalIDNumber FROM #temp AS A
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;
WHILE @@FETCH_STATUS = 0
   BEGIN
      IF (@eid > 10)
      BEGIN
        delete from #temp where #temp.EmployeeID = @eid;
      END
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

select * from #temp

thanks in advance

use AdventureWorks

select * into #temp from HumanResources.Employee;

declare @eid as int;
declare @nid as varchar(15);

DECLARE Employee_Cursor CURSOR FOR
SELECT A.EmployeeID, A.NationalIDNumber FROM #temp AS A
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;
WHILE @@FETCH_STATUS = 0
   BEGIN
      IF (@eid > 10)
      BEGIN
        delete from #temp where current of Employee_Cursor
      END
      FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;

select * from #temp

drop table #temp

this works for me

There is a much simpler answer - use this command:

delete from HumanResources.Employee where current of Employee_Cursor

It's called 'Positioned delete' and described at MSDN .

Could you please try in below ways, thanks for your time.

You have fetched data from cursor but didn't push into your variables missed in WHILE loop, please have a look on below code, thanks.

drop table #temp
select * into #temp from Employee;

declare @eid as int;
declare @nid as varchar(15);


DECLARE Employee_Cursor CURSOR FOR
    SELECT A.EmployeeID, A.NationalIDNumber FROM #temp AS A

OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;
WHILE @@FETCH_STATUS = 0
   BEGIN
      IF (@eid > 10)
      BEGIN
        delete from #temp where #temp.EmployeeID = @eid;
      END
      FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

select * from #temp

Update: I've changes in 2nd FETCH statement, just have added below highlighted part, thanks

FETCH NEXT FROM Employee_Cursor INTO @eid , @nid ;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM