---------------------------------------------------------------------------
一个简单游标,依次print表test的name字段
declare @name varchar(50)
declare @sql varchar(100)
declare csr1 cursor
for 
  select name from test
open csr1FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
  BEGIN
        print @name
  fetch next from csr1 into @name
  END
CLOSE csr1
DEALLOCATE csr1

解决方案 »

  1.   

    你的不是死锁是死循环了,改成这样:
    ...
    fetch next from test_cur into @table_name
    while @@fetch_status=0
    begin 
      set @sql ='select count(*) from '+@table_name
      exec(@sql)
      fetch next from test_cur into @table_name
    end
    ...
      

  2.   

    create table #temp (test_table_name  varchar(20)) --创建临时表#temp
    bulk insert #temp from 'c:\test_table_name.txt' --将表名导入临时表declare @table_name varchar(20)--变量表名@table_name
    declare @sql varchar(200)      --**** 这个变量最好定义大一点  ***---declare test_cur cursor for --使用游标逐条操作
    select test_table_name from #temp open test_cur
    fetch next from test_cur into @table_name  --*** @sql 这里的变量按道理应该是这个吧,当然不改也没错
    while @@fetch_status=0
    begin 
         set @sql ='select count(*) from '+@table_name
         exec(@sql) fetch next from test_cur into @table_name ---*** 少了这一句,所以造成死循环 ***--end
    close test_cur
    deallocate test_curdrop table #temp 
      

  3.   

    最主要的就是在循环中少了一句:
    fetch next from test_cur into @table_name ---*** 少了这一句,所以造成死循环 ***--没有这一句的话,@@fetch_status的值就不会改,那就一直=0,所以就造成死循环了.
      

  4.   

    也就是说照这个思路下来是对的了,谢谢大家。学习以后,将结帖。
    -----------------------
    fetch next from test_cur into @table_name  --*** @sql 这里的变量按道理应该是这个吧,当然不改也没错
    我初步试了一下,如果改成@table_name 可以出来多条查询结果,但是如果写成@sql的话,只出来最后一条查询结果。
    --------------------------
    如果不从文本文件中读取数据,从INI文件中,是不是就要用到其他的编程工具了?例如DELPHI?
      

  5.   

    思路是对的.从ini文件读取的话,确实要用编程工具.