Create Procedure sp_getRandomRecords
@iRecCount varchar(20) = '60'
AS
begin
declare @sql nvarchar(2000)
select @sql=N'SELECT TOP '+ @iRecCount +' * FROM actor_info ORDER BY NEWID() '
exec sp_executesql @sql
end

解决方案 »

  1.   


    Create Procedure sp_getRandomRecords
    @iRecCount varchar(10)  --输入参数时候把整数转成字符就可了
    AS
    declare @sql varchar(500)
    set @sql='SELECT TOP '+@iRecCount+' * FROM [table name] ORDER BY NEWID()'
    exec(@sql)
    GO
    exec sp_getRandomRecords '20'
      

  2.   

    用exec 执行 构造的动态语句,很容易的,不管参数是数字还是字符,默认都可以转换
      

  3.   


    Create Procedure up_getRandomRecords
    (
    @tabname varchar(1000),
    @iRecCount varchar(8000)  --输入参数时候把整数转成字符就可了
    )
    AS
    begin
    declare @sql varchar(8000)
    set @sql='SELECT TOP '+@iRecCount+' * FROM ['+@tabname+'] ORDER BY NEWID()'
    exec(@sql)
    end
    GO
    exec up_getRandomRecords 't_a','20'
      

  4.   

    在这样的情况下:一定要用动态SQL语句.exec()形式.
    Create Procedure sp_getRandomRecords
    @iRecCount integer = 60
    AS
    declare @str varchar(10)
    select @str=' SELECT TOP  '+cast(@iRecCount as varchar(10))+' * FROM  [table name] ORDER BY NEWID() '
    exec(@str)
    GO