OFFSET和FETCH NEXT的参数值

时间:2017-02-16 20:28:42

标签: sql-server tsql

有什么办法吗?

我希望能够通过EXEC sp_executesql

将其作为动态sql运行

目前 - 它只是一个字符串连接

像这样:

SET @sql += '
ORDER BY em.[Date] ' + IIF (@sortOrder = 'asc', 'ASC', 'DESC') + '
OFFSET ' + CONVERT (VARCHAR, @pageNum*@pageSize) + ' ROWS
FETCH NEXT ' + CONVERT (VARCHAR, @pageSize) + ' ROWS ONLY'

理想情况下,我希望它是:

SET @sql += '
ORDER BY em.[Date] ' + IIF (@sortOrder = 'asc', 'ASC', 'DESC') + '
OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY'

1 个答案:

答案 0 :(得分:2)

您可以通过在调用sp_executesql时传递其值来执行包含变量的动态TSQL命令。

这应该有效:

DECLARE @sql nvarchar(max)  
DECLARE @parameters nvarchar(max) 
DECLARE @tmp_offset int

--create dynamic sql command with variables
SET @sql += '
ORDER BY em.[Date] ' + IIF (@sortOrder = 'asc', 'ASC', 'DESC') + '
OFFSET @offset ROWS
FETCH NEXT @rows ROWS ONLY'

--calculate offset
SET @tmp_offset =  @pageNum * @pageSize

--define the parameters that will be used inside dynamic SQL
SET @parameters = N'@offset int, @rows int'   

--execute dynamic sql passing variables' values
EXECUTE sp_executesql @sql, @parameters, @offset = @tmp_offset, @rows = @pageSize