你是想写动态的SQL语句吗?
这个要调用系统存贮过程的
当中有一个sp_executesql的
写exe sp_executesql @Str

解决方案 »

  1.   

    直接换成实际参数内容来执行你的 'select top '+cast(@n as varchar(10))+' * from 
      (select * from Majors where major='''+@major+''' and type='''+@type+''') A order by newid()'
    语句有结果吗,参考资料说除了CREATE DEFAULT CREATE TRIGGER CREATE PROCEDURE CREATE VIEW CREATE RULE   外的成批处理的 Transact-SQL 代码都可用于创建存储过程
      

  2.   

    跟一下 @str 的值, 然后在执行看结果, exec(@str)
      

  3.   

    to bys_home(浪子无痕) :能麻烦你将该sql改成你所说的调用系统存贮过程?我不知道怎么写。to outspace(零度空间):你直接换成实际参数内容是什么意思?是以下这样吗?
    CREATE PROCEDURE topn
    @major varchar(6),
    @type varchar(2),
    @n int
    as 
    declare @str varchar(5000)
    set @str= 'select top '+cast(@n as varchar(10))+' * from 
      (select * from hardMajors where major='''+'汽车专业'+''' and type='''+'填空题'+''') A order by newid()'
    exec(@str) 
    go
    exec topn '汽车专业','填空题',4
    这样执行结果倒是正常。
      

  4.   

    错误修正:
    @major varchar(8),
    @type varchar(8),
    感谢各位!