我在SQL Server中有一个存储过程,用于从其中一个表中删除重复项。
此存储过程使用游标。
我试图在Microsoft Access中创建相同的存储过程,只需将'CREATE PROCEDURE'替换为'CREATE PROC',但它似乎不起作用。
任何人都可以提供一些解决方法吗?
这是SQL Server存储过程:
ALTER PROCEDURE [dbo].[csp_loginfo_duplicates]
AS
BEGIN
SET NOCOUNT ON;
declare @minrowid bigint
declare @empid nvarchar(15)
declare @dtpunched datetime
declare @count tinyint
declare curDuplicate cursor for
select empid,dtpunched,count(*),min(row_id) from loginfo
group by empid,dtpunched
having count(*)>1
open curDuplicate
fetch next from curduplicate into @empid,@dtpunched,@count,@minrowid
while (@@fetch_status=0)
begin
delete from loginfo where empid=@empid and dtpunched=@dtpunched and row_id<>@minrowid
fetch next from curduplicate into @empid,@dtpunched,@count,@minrowid
end
close curDuplicate
deallocate curDuplicate
END
答案 0 :(得分:1)
从Jet 4(Access 2000)开始,当您从ADO执行DDL语句时,Access DDL包括对CREATE PROCEDURE的支持。但是,与基于SQL Server体验的预期相比,这些“过程”是有限的。它们只能包含一个SQL语句,而不包含过程类型代码。基本上,Access存储过程与保存的查询相同,因此受到相同的限制,包括Access的db引擎不会说T-SQL。
对于变通方法,您可以创建与Access兼容的DELETE语句来删除重复项。但我首先会寻找“可能有效的最简单的东西”。
但是,我不知道这个建议是否适合你的情况。如果您向我们提供更多信息,您可能会得到更好的答案。