河漫滩水流大:SQL 急急急,快帮帮我~~~~~~~~~~~~~~~~~`

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 13:42:49
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 了
系统先告诉我游标不存在,又说游标已存在
名字也改过,问题同样存在

我在用游标之前,一般先判断游标是不是存在,如果存在就先DEALLOCATE 掉,

请在DECLARE Info_cursor CURSOR FOR 之前加上

if exists(select * from master.dbo.syscursors where cursor_name='Info_cursor')
begin
deallocate Info_cursor
end

可能是你上一次调试的时候没有关闭INFO_CURSOR,所以这次OPEN时,该游标确实已经打开,解决办法,先在第一行关闭游标,然后再改过来;同样定义游标时也一样。

继续检查吧,精神上支持你

先在查询分析器里执行这句.
DEALLOCATE Info_cursor
然后再执行你的存储过程.
应该就没问题了.
如果你的过程写的没问题的话,以后直接执行就可以.

将INFO_CURSOR换一个名字试一下,如果故障依旧,那么在DECLARE Info_cursor CURSOR FOR
前加DEALLOCATE Info_cursor