高分求解SQL游标问题

bearold 2007-04-02 11:11:11
有如下一种代码,目的从库中枚举出表名与所有者,如果表的所有者是'wygl'则将之修改为'dbo'。但是代码在运行时只是不停的取出第一个表,游标并不向下走,搞不清楚是什么问题?!
代码如下:
------------------------------

Declare @table_name varchar(40),@table_schema varchar(20)
Declare table_cursor CURSOR FOR
SELECT table_name,table_schema from INFORMATION_SCHEMA.TABLES

open table_cursor

FETCH NEXT FROM table_cursor into @table_name,@table_schema
WHILE @@FETCH_STATUS = 0
PRINT @table_name+''+@table_Schema
BEGIN
if @table_schema='wygl'
BEGIN
PRINT @table_name+''+@table_Schema
EXEC sp_changeobjectowner @table_name ,'dbo'
END
FETCH NEXT FROM table_cursor into @table_name,@table_schema
END
CLOSE table_cursor
DEALLOCATE table_cursor

...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kafuwei 2007-04-02
  • 打赏
  • 举报
回复
WHILE @@FETCH_STATUS = 0
PRINT @table_name+''+@table_Schema

在这步进入死循环。
sp4 2007-04-02
  • 打赏
  • 举报
回复
一个while 死循环
sp4 2007-04-02
  • 打赏
  • 举报
回复
哈哈
中国风 2007-04-02
  • 打赏
  • 举报
回复
这样就OK了简单方便:
declare hcforeach cursor global
for
SELECT 'EXEC sp_changeobjectowner '+quotename('wygl.'+table_name,'''') +',''dbo'''
from INFORMATION_SCHEMA.TABLES where table_schema='wygl'
exec sp_msforeach_worker '?'
中国风 2007-04-02
  • 打赏
  • 举报
回复
declare hcforeach cursor global
for
SELECT 'EXEC sp_changeobjectowner '+quotename(table_name,'''') +',''dbo'''
from INFORMATION_SCHEMA.TABLES where table_schema='wygl'
exec sp_msforeach_worker '?'
hrb2008 2007-04-02
  • 打赏
  • 举报
回复
Declare @table_name varchar(40),@table_schema varchar(20)
Declare table_cursor CURSOR FOR
SELECT table_name,table_schema from INFORMATION_SCHEMA.TABLES

open table_cursor

FETCH NEXT FROM table_cursor into @table_name,@table_schema
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @table_name+''+@table_Schema

if @table_schema='wygl'
BEGIN
PRINT @table_name+''+@table_Schema
EXEC sp_changeobjectowner @table_name ,'dbo'
END
FETCH NEXT FROM table_cursor into @table_name,@table_schema
END
CLOSE table_cursor
DEALLOCATE table_cursor
believe209 2007-04-02
  • 打赏
  • 举报
回复
学习!
paoluo 2007-04-02
  • 打赏
  • 举报
回复
那句代碼放在那裡,相當於WHILE @@FETCH_STATUS = 0中只有首先“PRINT @tble_name+''+@table_Schema ”這一句代碼。

游標不能移動,“WHILE @@FETCH_STATUS = 0”也就一直滿足條件,就在那死循環了.
paoluo 2007-04-02
  • 打赏
  • 举报
回复
Declare @table_name varchar(40),@table_schema varchar(20)
Declare table_cursor CURSOR FOR
SELECT table_name,table_schema from INFORMATION_SCHEMA.TABLES

open table_cursor

FETCH NEXT FROM table_cursor into @table_name,@table_schema
WHILE @@FETCH_STATUS = 0
--PRINT @tble_name+''+@table_Schema --這句代碼的問題,將此句代碼放到BEGIN中去
BEGIN
PRINT @table_name+''+@table_Schema
if @table_schema='wygl'
BEGIN
PRINT @table_name+''+@table_Schema
EXEC sp_changeobjectowner @table_name ,'dbo'
END
FETCH NEXT FROM table_cursor into @table_name,@table_schema
END
CLOSE table_cursor
DEALLOCATE table_cursor
paoluo 2007-04-02
  • 打赏
  • 举报
回复
...
bearold 2007-04-02
  • 打赏
  • 举报
回复
哈,Sorry,真是干晕了,自已都没注意到。谢谢,可以了。我第一次使用游标。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧