
SQL 急急急,快帮帮我~~~~~~~~~~~~~~~~~` 5
CREATEPROCEDUREget_tableinfoASdeclare@tablenamevarchar(255)--表名称DECLAREInfo_cursorCUR...
CREATE PROCEDURE get_tableinfo AS
declare @tablename varchar(255) --表名称
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
and o.name not like N'#%%' AND O.NAME!='XX' AND O.NAME!='TABLEINFO' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
if exists (select * from dbo.sysobjects
where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
execute sp_executesql
N'DELETE TABLEINFO WHERE NAMEINFO=@TBNAME',
N'@tbname varchar(255)',
@tbname = @tablename
END
FETCH NEXT FROM Info_cursor INTO @tablename
END
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO
执行的时候系统说INFO_CURSOR游标已存在是怎么
回事,我要怎么改才能好用呢?????
我加 DEALLOCATE Info_cursor 了
系统先告诉我游标不存在,又说游标已存在
名字也改过,问题同样存在 展开
declare @tablename varchar(255) --表名称
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
and o.name not like N'#%%' AND O.NAME!='XX' AND O.NAME!='TABLEINFO' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
if exists (select * from dbo.sysobjects
where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
execute sp_executesql
N'DELETE TABLEINFO WHERE NAMEINFO=@TBNAME',
N'@tbname varchar(255)',
@tbname = @tablename
END
FETCH NEXT FROM Info_cursor INTO @tablename
END
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO
执行的时候系统说INFO_CURSOR游标已存在是怎么
回事,我要怎么改才能好用呢?????
我加 DEALLOCATE Info_cursor 了
系统先告诉我游标不存在,又说游标已存在
名字也改过,问题同样存在 展开
5个回答
展开全部
先在查询分析器里执行这句.
DEALLOCATE Info_cursor
然后再执行你的存储过程.
应该就没问题了.
如果你的过程写的没问题的话,以后直接执行就可以.
DEALLOCATE Info_cursor
然后再执行你的存储过程.
应该就没问题了.
如果你的过程写的没问题的话,以后直接执行就可以.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能是你上一次调试的时候没有关闭INFO_CURSOR,所以这次OPEN时,该游标确实已经打开,解决办法,先在第一行关闭游标,然后再改过来;同样定义游标时也一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在用游标之前,一般先判断游标是不是存在,如果存在就先DEALLOCATE 掉,
请在DECLARE Info_cursor CURSOR FOR 之前加上
if exists(select * from master.dbo.syscursors where cursor_name='Info_cursor')
begin
deallocate Info_cursor
end
请在DECLARE Info_cursor CURSOR FOR 之前加上
if exists(select * from master.dbo.syscursors where cursor_name='Info_cursor')
begin
deallocate Info_cursor
end
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将INFO_CURSOR换一个名字试一下,如果故障依旧,那么在DECLARE Info_cursor CURSOR FOR
前加DEALLOCATE Info_cursor
前加DEALLOCATE Info_cursor
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
继续检查吧,精神上支持你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询