sql-server - 如何从 EXEC sp_executeSql 中选择?

标签 sql-server tsql

我的存储过程:

    @currPage int,
    @recodperpage int,
    @name varchar(20) = NULL,
    @type varchar(50) = NULL,
    @size varchar(50) = NULL,
    @country varchar(50) = NULL
AS
BEGIN
    DECLARE @Sql NVARCHAR(MAX);

    SELECT 
        @Sql = N'SELECT ROW_NUMBER() 
            OVER(ORDER BY MatchID Desc) AS RowNum, 
            MatchID,
            NameMatch,
            Images 
        FROM Match WHERE MatchID > 0 '

    IF @type IS NOT NULL
        SELECT @Sql += N' AND Type = ''' + REPLACE(convert(varchar(50),@type),'''','''''')+'''';

    IF @size IS NOT NULL
        SELECT @Sql += N' AND MatchSize = ''' + REPLACE(convert(varchar(50),@size),'''','''''')+'''';

    IF @country IS NOT NULL
        SELECT @Sql += N' AND Country = ''' + REPLACE(convert(varchar(50),@country),'''','''''')+''''

    EXEC SP_EXECUTESQL @Sql 
END

我想要
select * 
from EXEC SP_EXECUTESQL @Sql result 
where RowNum between (@currPage - 1) * @recodperpage + 1 
                 and @currPage * @recodperpage

最佳答案

您可以声明一个 @table使用与存储过程输出相同的列,然后:

INSERT INTO @table
EXEC SP_EXECUTESQL @Sql

SELECT *
FROM @table
where RowNum between (@currPage - 1) * @recodperpage + 1
                 and @currPage * @recodperpage

关于sql-server - 如何从 EXEC sp_executeSql 中选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35704558/

相关文章:

sql-server - x64 中的 SSDT-BI SSIS?

sql - 如何在查询中的两个列名称之间添加 'n' 个空格?

mysql - Sql-server 到 MySQL 的迁移问题 - 最大行大小不能超过 65,535 字节

sql-server - 为什么我的数据透视查询无法正确分组?

sql - 将 uniqueidentifier 类型转换为字符串

sql - 如何编写SQL查询以标识特定字段中的重复值?

sql-server-2008 - 为 SQL Server 中的表创建 LOG

mysql - SQL 查询语句中包含 drop 或 null

sql-server - MSSQL : Unable to create relationships for two foreign keys to the same table?

sql - 做数据透视时无用的错误消息