【问题标题】:alternative way to TRIM for SSRS (not Crystal Reports)SSRS 的 TRIM 替代方法(不是 Crystal Reports)
【发布时间】:2016-10-26 17:05:38
【问题描述】:

我将报告从 Crystal 导入到 SSRS。

当我在 Microsoft 管理控制台中运行查询时,它会引发错误,除非我在 SELECT 语句之前声明变量。当我从 Visual Studio 运行查询时,它会绕过这些变量,只会在 TRIM 函数上引发错误。

据我所知,可以使用 JOIN 语句代替 TRIM,但我不确定。

这是我尝试更改/适应与 SSRS 一起使用的 where 子句的一部分,它会引发错误 - 任何建议表示赞赏。

另外,我对 WHERE 子句中的 DateSerial 有如下问题:

AND (CAST(@StartDate AS Date) DateSerial(1900, 01, 01)) AND

【问题讨论】:

    标签: tsql


    【解决方案1】:

    Trim 仅在报表表达式中不能在 SQL 中工作,您必须使用 LTrim 和 RTrim 才能完成这项工作。

    AND ( ( NOT ( @Status IS NULL ) 
         AND RTrim(LTrim(@Status)) <> 'All' ) 
        (( ( RTrim(Ltrim(@Status)) = 'Completed' ) 
    
    AND RTrim(LTrim(@AssignedTo)) <> 'All' ) 
                AND ( submission.assignedto IN ( @AssignedTo ) )
    

    包括整个 WHERE 子句:

    WHERE  ( @ParameterIds IS NOT NULL or ParameterIds = @ParameterIds )    
               AND @ParameterIds <> 0 ) 
             AND ( requested_table.parameterid IN ( @ParameterIds ) ) ) 
           AND requested_table.columnname = 'INSERT' 
           AND ( ( NOT ( @Parameter2 IS NULL ) 
                  AND Trim(@Parameter2) <> 'All' ) 
                 AND (( ( Trim(@Parameter2) = 'Completed' ) 
                        AND (( requested_table.columnname = 'Dup' 
                                OR requested_table.columnname = 'IDup' 
                                OR requested_table.columnname = 'W/D' 
                                OR requested_table.columnname = 'Done' 
                                OR requested_table.columnname = 'QA Review Dup' 
                                OR requested_table.columnname = 'X' )) 
                         OR ( requested_table.columnname IN ( @Parameter2 ) ) )) ) 
           AND ( ( @ParameterIds = 0 ) 
                 AND ( ( ( NOT ( @StartDate IS NULL ) 
                           AND ( Cast (@StartDate AS DATE) <> 
                                 Dateserial(1900, 01, 01) ) ) 
                         AND ( submission.dateimported >= Datevalue (@StartDate) ) ) 
                       AND ( ( NOT ( @EndDate IS NULL ) 
                               AND ( Cast (@EndDate AS DATE) <> 
                                     Dateserial(1900, 01, 01) ) 
                             ) 
                             AND ( table.dateimported <= Datevalue (@EndDate) ) 
                           ) ) ) 
           AND ( ( @ParameterIds = 0 ) 
                 AND (( ( NOT ( @Parameter5 IS NULL ) 
                        AND Trim(@Parameter5) <> 'All' ) 
                        AND ( table.assignedto IN ( @Parameter5 ) ) )) ) 
    

    修复 Dateserial,这应该可以工作。

    WHERE  ( @ParameterIds IS NOT NULL or ParameterIds = @ParameterIds )    
           AND (@ParameterIds <> 0 ) 
         AND ( requested_table.parameterid IN ( @ParameterIds ) ) 
       AND requested_table.columnname = 'INSERT' 
       AND ( (  (@Parameter2 IS NOT NULL ) 
              AND LTRIM(RTrim(@Parameter2)) <> 'All' ) 
             AND (( ( LTRIM(RTrim((@Parameter2)) = 'Completed' ) 
                    AND (( requested_table.columnname = 'Dup' 
                            OR requested_table.columnname = 'IDup' 
                            OR requested_table.columnname = 'W/D' 
                            OR requested_table.columnname = 'Done' 
                            OR requested_table.columnname = 'QA Review Dup' 
                            OR requested_table.columnname = 'X' )) 
                     OR ( requested_table.columnname IN ( @Parameter2 ) ) )) ) 
       AND ( ( @ParameterIds = 0 ) 
             AND ( ( (  ( @StartDate IS NOT NULL ) 
                       AND ( Cast (@StartDate AS DATE) <> 
                             Dateserial(1900, 01, 01) ) ) 
                     AND ( submission.dateimported >=  (@StartDate) ) ) 
                   AND ( (  ( @EndDate IS NOT NULL ) 
                           AND ( Cast (@EndDate AS DATE) <> 
                                 Dateserial(1900, 01, 01) ) 
                         ) 
                         AND ( table.dateimported <=  (@EndDate) ) 
                       ) ) ) 
       AND ( ( @ParameterIds = 0 ) 
             AND (( (  ( @Parameter5 IS NOT NULL ) 
                    AND RTRIM(LTrim(@Parameter5)) <> 'All' ) 
                    AND ( table.assignedto IN ( @Parameter5 ) ) )) )
    

    【讨论】:

    • 谢谢。我确实改变了这个并收到了这个错误:
    • 本地报表处理过程中出错。报告处理过程中发生错误。数据集“DataSet1”的查询执行失败。在预期条件的上下文中指定的非布尔类型的表达式,靠近“,”。 'RTrim' 附近的语法不正确。关键字“NOT”附近的语法不正确。关键字“NOT”附近的语法不正确。
    • 你的 where 子句有点混乱,我只修复了 Trim 函数。你想用你的 where 子句实现什么?不匹配的括号太多。
    • 我把整个 WHERE 子句放在那里。我的问题是它在 Crystal 中工作,但 SSRS 不会采用任何形式的 TRIM 函数,并且似乎在 CAST、IN、Dateserial 方面存在问题。当我尝试在 SQL Server 中运行该语句时,我必须注释掉参数。如果我从 SSRS 中删除 WHERE 子句,它运行良好。我想我需要微调 WHERE 子句。任何建议表示赞赏。
    • 日期序列是另一个 VB 函数,在 SLQ 中不起作用,试试这个 - stackoverflow.com/questions/3355015/date-serial-in-sql 修复 where 子句中的日期序列,我认为这应该工作,如果不是我会用 T 标记它-SQL 作为 T-SQL 语法错误而不是 SSRS 错误。
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多