Declare cur cursor for --scroll去掉,只让cur用next
Select sCard_c from kcard
Open cur
Fetch next from cur into @sCard_c --简单点
While (@@Fetch_Status=0)
begin
-- print @sCard_c
-- delete from srv_lnk.a.dbo.[kcard] where sCard_c=@sCard_c
改成delete from srv_lnk..kcard where sCard_c=@sCard_c
--select @sCardtype_c=scardtype_c from srv_lnk.a.dbo.[kcard] where Card_c=@sCard_c
Fetch next from cur into @sCard_c
End
Close cur
Deallocate cur
end
--如果要遍历游标的所有项的正确写法,游标操作改为如下语句:
Fetch next from cur into @sCard_c
While (@@Fetch_Status=0)
begin
-- print @sCard_c
delete from srv_lnk.a.dbo.[kcard] where sCard_c=@sCard_c
--select @sCardtype_c=scardtype_c from srv_lnk.a.dbo.[kcard] where Card_c=@sCard_c
Fetch next from cur into @sCard_c
End
Close cur
Deallocate cur
ALTER PROCEDURE p_VPNTranData
@sDBName varchar(50),@sDBUser varchar(20),@sDBPass as varchar(20),@sBS as Varchar(3),@sShopName as varchar(50)
AS
--%%%%%%%%%%%%%%%%%%%%%%%%%%生成连接%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if exists(select 1 from master..sysservers where srvname='srv_lnk')
exec sp_dropserver 'srv_lnk','droplogins'
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB',@sDBName
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,@sDBUser,@sDBPass
--%%%%%%%%%%%%%%%%%%%%%%%%%%生成连接结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DECLARE @sCard_c as varchar(50)
DECLARE @sCardtype_c as varchar(50)
if @sBS='1'
begin
Declare cur scroll cursor for
Select sCard_c from kcard
Open cur
Fetch first from cur into @sCard_c
While (@@Fetch_Status=0)
begin
-- print @sCard_c
delete from srv_lnk.a.dbo.[kcard] where sCard_c=@sCard_c
--select @sCardtype_c=scardtype_c from srv_lnk.a.dbo.[kcard] where Card_c=@sCard_c
Fetch cur into @sCard_c
End
Close cur
Deallocate cur
end
以上存储过程运行到delete from srv_lnk.a.dbo.[kcard] where sCard_c=@sCard_c
就不再继续运行了,不知道是什么原因。