我写的存储过程是这样
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这个参数应该怎么传???

解决方案 »

  1.   

    不好意思,忘把条件加上去了
    应该是这样
    CREATE PROCEDURE GetExam_Get_Exam17
    @length varchar(50),
    @tablename varchar(50),
    @testid varchar(50)
    AS
    BEGIN
    Declare @SqlStr varchar(100)
    SET
    @SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='+@testid+' ORDER BY NEWID()'
    EXEC (@SqlStr)
    END
      

  2.   

    @SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='+@role+' 
    这句可能有问题
    其中的变量在在你拼得串中,引用的格式可能不对,
    试试
    @SqlStr='SELECT TOP ''+@length+'' * FROM ''+@tablename+'' where Role='''+@role+''''
    具体怎么写我记不清楚了,但肯定是要在单引号上做文章,明天上班我看看公司机器里存的东西在告诉你。
      

  3.   

    我按你的方法试了应该是这样
    @SqlStr='SELECT TOP '+@length+' * FROM '+@tablename+' where Role='''+@testid+''' ORDER BY NEWID()'
    谢了