【发布时间】:2012-01-11 04:00:09
【问题描述】:
我想使用游标从表中删除记录。我该怎么做?
我使用 MSSQL 2008 Express 此代码不会从 #temp 中删除任何内容。我还尝试了 cursor_name 的 current 不起作用的地方。
这是我的示例代码:
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
提前致谢
【问题讨论】:
-
看在上帝的份上,为什么要使用游标而不是简单的删除查询呢?你对你的 DBA 有怨恨吗?
-
愚蠢的问题,但是您在 Employee 表中有任何 EmployeeID > 10 吗?另外你为什么要为此做一个游标?这是一种非常低效的方法。还要确保没有触发器会中止您的删除。
-
@JohnFx 不,我只是好奇,只是为了学习,实际上我也使用简单的删除语句
-
@JohnFX 也许他只是想确保创建尽可能多的争用:D TempDB 上的光标似乎是个好方法。 j/k vivek 有点。
-
@vivek - 不要作恶。你可能会擅长它。
标签: sql-server database-cursor