日期:2014-05-18  浏览次数:20691 次

显示游标中的字符串SQL问题 !
alter   proc   procCheckProvider(
@columnsValue   as   varchar(100)
)
as  
DECLARE   @TName   AS   VARCHAR(50)
DECLARE   @CName   AS   VARCHAR(50)
DECLARE   @STR   AS   VARCHAR(1000)
DECLARE   a1   CURSOR   FOR  
SELECT   sysobjects.name,syscolumns.name   as   columnsName
FROM   sysobjects   INNER   JOIN
            syscolumns   ON   sysobjects.id   =   syscolumns.id  
WHERE   (sysobjects.xtype   =   'u ')   AND   syscolumns.name   =   'providerid '   order   by   sysobjects.name,syscolumns.name

OPEN   a1
FETCH   NEXT   FROM   a1   INTO   @TName,@CName
WHILE   @@FETCH_STATUS   =   0
BEGIN
set   @str= 'if   EXISTS(select   *   from   [ '+@tname+ ']   where   '+@cname+ '= ' ' '+@columnsValue+ ' ' ')
begin
if   exists(select   *   from   '+@tname+ '   where   '+@cname+ '= ' ' '+@columnsValue+ ' ' ')
begin
select   ' '出错 ' '
return     --为什么这里的return不能返回?
end
end
'
--print   @str
EXEC(@STR)
FETCH   NEXT   FROM   a1   INTO   @TName,@CName
END

CLOSE   a1
DEALLOCATE   a1
select   ' '

在上面的return     不能返回呢?而是继续执行呢?
难道不能在那里用return吗?请问该用什么语句在那里返回?

------解决方案--------------------
因为你返回时要关闭游标,所以可以这样来做

将return修改为goto Err1

goto Err1
end
end
'
--print @str
EXEC(@STR)
FETCH NEXT FROM a1 INTO @TName,@CName
END

CLOSE a1
DEALLOCATE a1
return

Err1:
CLOSE a1
DEALLOCATE a1