请教高手

[复制链接]
查看11 | 回复7 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
为什么sql server中这样定义有错误
create procedure aaa
@name varchar(30)
as
declare @str varchar(5000)
select @str = "select a fromtbawhere l1 ='"+@name+"'
declare c1 cursor for @str //出错位置
open c1
fetch next from c1
....
close c1
deallocate c1
请问高手有什么办法,可定义该游标
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
create procedure aaa
@name varchar(30)
as
declare @str varchar(5000)
select @str = 'select a from tba where l1 ='''+@name+''''
exec('declare c1 cursor for @str')
open c1
fetch next from c1
....
close c1
deallocate c1
注意用的是单引号。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
~~
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
上面的语句应该是错误的。
create procedure aaa
@name varchar(30)
as
declare @str varchar(5000)
select @str = 'select a from tba where l1 ='''+@name+''''
exec('declare c1 cursor for' +@str) ---- *******
open c1
fetch next from c1
....
close c1
deallocate c1
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
exec sp_read_seq 6,@lSeq out
select @ttbName2 = "ttb"+ltrim(str(@lSeq))
select @str = ' SELECT a.cnvcOrderCode,b.cnvcProductName '
select @str = @str + ' FROM '+@ttbName1+' a, tbProduct b'
select @str = @str + ' WHERE a.cnvcProductCode = b.cnvcProductCode '
exec (' declare c1 cursor for @str ')
错误描述如下:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '@str' 附近有语法错误。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 stormproof 发布
[B]上面的语句应该是错误的。
create procedure aaa
@name varchar(30)
as
declare @str varchar(5000)
select @str = 'select a from tba where l1 ='''+@name+''''
exec('declare c1 cursor for' +@str) ---- *******
open c1
fetch next from c1
....
close c1
deallocate c1 [/B]

嗯,你是对的,我写的太快。

exec('declare c1 cursor for' +@str)
不是
exec('declare c1 cursor for@str' )
不然@str就成字符了,不是变量。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 goodIven 发布
[B]~~ [/B]

是exec的用法吗?这里,帮助里的东东。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
谢谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行