Sql server 在SQL中将ORDER BY列作为参数传递

Sql server 在SQL中将ORDER BY列作为参数传递,sql-server,reporting-services,azure-sqldw,azure-sql-data-warehouse,Sql Server,Reporting Services,Azure Sqldw,Azure Sql Data Warehouse,我构建了一个存储过程,它接受输入参数并返回一个结果集,以便将其用于Reporting Services。但是,用户希望选择他们选择的按列排序。所以,我试过这样的方法: CREATE PROCEDURE [dbo].[usp_RevenueReport] (@ProductNumber INT, @ProductName VARCHAR(MAX), @ProductType VARCHAR(MAX), @SortColumns VARCHAR(MAX)) SELECT [Produ

我构建了一个存储过程,它接受输入参数并返回一个结果集,以便将其用于Reporting Services。但是,用户希望选择他们选择的按列排序。所以,我试过这样的方法:

CREATE PROCEDURE [dbo].[usp_RevenueReport] 
(@ProductNumber INT, 
@ProductName VARCHAR(MAX), 
@ProductType VARCHAR(MAX), @SortColumns VARCHAR(MAX))

    SELECT [ProductNumber],
    [ProductName], 
    [ProductType]
    FROM [dbo].[Products]
    WHERE [ProductName] IN (SELECT value FROM STRING_SPLIT(@ProductName, ',')  WHERE RTRIM(value) <> '') 
    AND [ProductType] IN (SELECT value FROM STRING_SPLIT(@ProductType, ',')  WHERE RTRIM(value) <> '')
    ORDER BY (SELECT value FROM STRING_SPLIT(@SortColumns, ',')  WHERE RTRIM(value) <> '');
当我传递多个列进行排序时,它抛出了一个错误。如何根据我通过的内容进行排序

Msg 512,级别16,状态1,第1行子查询返回的值超过1 价值当子查询在=、!=、=或者当子查询用作表达式时

这是我的环境:
Microsoft Azure SQL数据仓库-10.0.10887.0 2020年1月23日07:36:54版权所有c Microsoft Corporation

您正在尝试按结果集订购?那没有任何意义。即使你能做到这一点,它也会按照传入的字符串排序,而不是列本身。允许这样的通用排序的唯一方法是动态SQL。@DaleK介意发布一个示例吗?@jw11432抱歉,我没有理解你的意思。如果我理解,只需将所有订单的功能提供给用户并从中进行选择?如果是这样,不幸的是,用户希望选择一个或多个列进行排序。如果我添加过滤器,它将以多个排列和组合结束。如果报告相当简单,那么再看看交互式排序,他们可以在报告呈现后对列进行排序。不幸的是,我无法回答,因为不实际使用SSR的人坚持要结束关于SSR的问题。可以使用Dataset属性上的表达式函数Fx将查询解析为带引号的文本包装行=从&VBCRLF&中选择*。然后添加排序方式的ORDER BY&REPLACEJOINParameters!sort.Value,,,是否尝试按结果集排序?那没有任何意义。即使你能做到这一点,它也会按照传入的字符串排序,而不是列本身。允许这样的通用排序的唯一方法是动态SQL。@DaleK介意发布一个示例吗?@jw11432抱歉,我没有理解你的意思。如果我理解,只需将所有订单的功能提供给用户并从中进行选择?如果是这样,不幸的是,用户希望选择一个或多个列进行排序。如果我添加过滤器,它将以多个排列和组合结束。如果报告相当简单,那么再看看交互式排序,他们可以在报告呈现后对列进行排序。不幸的是,我无法回答,因为不实际使用SSR的人坚持要结束关于SSR的问题。可以使用Dataset属性上的表达式函数Fx将查询解析为带引号的文本包装行=从&VBCRLF&中选择*。然后添加排序方式的ORDER BY&REPLACEJOINParameters!sort.Value,,',