有什么办法吗?
我希望能够通过EXEC sp_executesql
目前 - 它只是一个字符串连接
像这样: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'
答案 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