存储过程里能不能用top 请看
CREATE PROCEDURE Pr_Sel
(
@Num int
)
AS
BEGIN
select top @Num
END
这样写好像不可以,应该怎么写?
------解决方案--------------------top @Num
--------------------
Top语句后面是一个常数,而不能是一个变量!
------解决方案--------------------可,see
CREATE PROCEDURE Coffeefox_Paging
(
@tblName varchar(50) , ------ 表名
@strGetFields varchar(500)= ' * ' , ------ 需要返回的列
@fldName varchar(50)= ' ' , ------ 排序的字段名
@PageSize int = 15, ------ 页尺寸
@PageIndex int=1 , ------ 页码
@OrderType bit = 1, ------ 设置排序类型, 0升序,1为降序
@strWhere varchar(1500) = ' ' ------ 查询条件 (注意: 不要加 where)
)
AS
declare @strSQL varchar(5000) ------ 主语句
declare @strOrder varchar(300) ------ 排序类型
if @fldName!= ' '
begin
if @OrderType != 0 -----如果@OrderType不是0,就按降序排列
begin
set @strOrder = ' order by [ ' + @fldName + '] desc '
end
else-----@OrderType为0,按升序排列
begin
set @strOrder = ' order by [ ' + @fldName + '] asc '
end
end
else
begin
set @strOrder = ' '
end
begin
if @PageIndex = 1 ------如果指定为第一页
begin
if @strWhere != ' '
set @strSQL = 'select top ' + str(@PageSize) + ' '+@strGetFields+ ' from [ ' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) + ' '+@strGetFields+ ' from [ '+ @tblName + '] '+ @strOrder
end
else------不为第一页
begin
if @strWhere != ' '
set @strSQL = 'select top ' + str(@PageSize) + ' '+@strGetFields+ ' from [ ' + @tblName + '] where [ ' + @fldName + '] not in (select top ' + str((@PageIndex-1)*@PageSize) + ' [ '
+ @fldName + '] from [ ' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') and ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) + ' '+@strGetFields+ ' from [ ' + @tblName + '] where [ ' + @fldName + '] not in (select top ' + str((@PageIndex-1)*@PageSize) + ' [ '
+ @fldName + '] from [ ' + @tblName + '] ' + @strOrder + ') ' + @strOrder
end
end
exec (@strSQL)
GO
------解决方案--------------------动态执行Sql语句!!!
在存储过程中能不用动态执行就不用!
------解决方案--------------------SET ROWCOUNT @Num
------解决方案--------------------可以使用,代码如下;
create proc sel_jobs
@Num int
as
DECLARE @strSql nvarchar(2000)
set @strSql = 'select top ' + str(@Num) + 'from jobs '
exec (@strSql)