注册 登录
编程论坛 SQL Server论坛

[求助]PROCEDURE

joyes 发布于 2006-12-29 21:20, 1334 次点击
我写的存储过程是这样
CREATE PROCEDURE Roles
@length varchar(50),
@tablename varchar(50),
@role varchar(50)
AS
BEGIN
Declare @SqlStr varchar(100)
SET
@SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='+@role+'
EXEC (@SqlStr)
END
可以创建
但是运行的时候就出错了
exec Roles '10','login','Teacher'
显示的错误是:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'Teacher' 无效。
我觉得SQL语句运行的时候应该是这样了所以错了
Select top 10 * from login where Role=Teacher
我想问下大家@role这个参数应该怎么传???
13 回复
#2
xu20002006-12-29 21:28
@SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='+@role

后面不用加'了吧。
#3
joyes2006-12-29 21:31
我试试
#4
joyes2006-12-29 21:33
不对呀。那样根本就没赋值了
#5
joyes2006-12-29 21:34
没看清你的改正不好意思,如果我后面还有条件呢
怎么些
比方说我后面有order by newid()
#6
xu20002006-12-29 21:39
我试过了,好用。
#7
joyes2006-12-29 21:41
如果后面有条件呢
CREATE PROCEDURE Roles
@length varchar(50),
@tablename varchar(50),
@role varchar(50)
AS
BEGIN
Declare @SqlStr varchar(100)
SET
@SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='+@role+' ORDER BY NEWID()'
EXEC (@SqlStr)
END
#8
棉花糖ONE2006-12-29 21:48

用了order by newid(),再用top没意义啊

#9
xu20002006-12-29 21:51
不用语法没错呀。在我的机子上试验也没抱错。
#10
joyes2006-12-29 21:51
哦,没意义了呀,我看看
那个问题解决了
应该是这样
@SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='''+@testid+''' ORDER BY NEWID()'
#11
joyes2006-12-29 21:53
好象有意义呀,我选前几条呀,ORDER BY NEWID()又不可以选前几条
#12
joyes2006-12-29 21:55

创建是没错,但是赋值的时候就会出错了。

#13
bygg2006-12-29 22:18
@SqlStr=SELECT TOP @length * FROM @tablename where Role=@role

这样.
#14
棉花糖ONE2006-12-29 22:37
以下是引用bygg在2006-12-29 22:18:01的发言:
@SqlStr=SELECT TOP @length * FROM @tablename where Role=@role

这样.

带参数的top不能之间这样用,只能用动态的sql

1