【问题标题】:Using a table value function in a SSRS dataset causing an error在 SSRS 数据集中使用表值函数导致错误
【发布时间】:2018-09-24 16:02:10
【问题描述】:

我的数据集在 SSMS 中工作正常,但是当我尝试将其插入 SSRS 时,我收到错误 Incorrect syntax near the keyword 'CONVERT' (Error 156) 我使用函数的原因是拆分字符串以获取字段注意、地址 1 和地址2. 使用交叉应用 [dbo].[split3] 连接函数。我使用的环境是 SQL Server 2008 R2。

   select
    a.fsono, 
    a.fcustno, 
    Replace(max(a.Attention), 'ATTN: ', '') As Attention,
    MAX(a.Address1) AS Address1,
    MAX(a.Address2) AS Address2,  
      a.ShipCode,
    a.Item,
    a.Qty,
    a.Descr,
    a.fordername,
      a.fcfromno,
    a.fcfromtype,
    a.min_finumber


    FROM (
        SELECT 
    soitem.fsono, 
     somast.fcustno, 
     CAST(somast.fackmemo as CHAR(35)) as ShipCode,
     CASE WHEN soitem.fcfromtype <> 'IFPKIT' THEN soitem.fpartno ELSE soitem.fcfromno END AS Item,
    CASE WHEN soitem.fcfromtype <> 'IFPKIT' THEN soitem.fquantity ELSE soitem.fquantity / soitem.fquoteqty END AS Qty,  
    CASE WHEN soitem.fcfromtype <> 'IFPKIT' 
    THEN CAST(soitem.fdesc as CHAR(35))
    ELSE 'Store Set (Phantom)' END as Descr, 
      somast.fordername,
 soitem.fcfromno,
    soitem.fcfromtype,
    MIN(soitem.finumber) OVER (PARTITION BY soitem.fsono, soitem.fcfromno) AS min_finumber,


     Attention = Case  
    when (CONVERT(VARCHAR(MAX), soship.fmstreet)) like 'ATTN%'
    Then Left(CONVERT(VARCHAR(MAX), soship.fmstreet),CHARINDEX(CHAR(10),CONVERT(VARCHAR(MAX), soship.fmstreet)))

    when (CONVERT(VARCHAR(MAX), soship.fmstreet)) Not like 'ATTN%'
    Then REPLICATE((CASE WHEN [id] = 2 THEN s.val ELSE NULL END),1)

    Else null 
     END,    

     Address1 = CASE


     when (CONVERT(VARCHAR(MAX), soship.fmstreet)) Not like 'ATTN%'
           Then REPLICATE((CASE WHEN [id] = 1 THEN s.val ELSE NULL END),1)

     WHEN [id] = 2 THEN s.val

           End

    ,
            Address2 = CASE WHEN [id] = 3 THEN s.val ELSE NULL END


    from soitem INNER JOIN
     somast ON soitem.fsono = somast.fsono
     INNER JOIN
     soship ON somast.fsono = soship.fcsono AND soship.fcenumber = ''
     Cross apply [dbo].[split3] (REPLACE(CONVERT(VARCHAR(MAX), soship.fmstreet), '&', 'and'),char(13) + char(10)) as S


      WHERE  


    (somast.fstatus <> 'Cancelled') AND (somast.fsocoord  = 'IFP' OR
     somast.fsocoord = '711') and somast.forderdate >'07-01-2018'

     ) as A



    group by 
    a.fsono, 
    a.fcustno, 
     a.ShipCode,
    a.Item,
    a.Qty,
    a.Descr,
    a.fordername,
    a.fcusrchr2,
    a.fcusrchr3,
    a.fcusrchr1,
     a.fcfromtype,
    a.min_finumber

    order by a.fsono, a.min_finumber;

【问题讨论】:

  • 您确定 SSMS 将其视为单个 SQL 语句吗?它可以一次处理多个,SSRS 不能。
  • 您是否尝试使用 ANSI 标准 CAST 代替 CONVERT?您已经在查询的其他地方使用了 CAST。
  • @HardCode 我改成 CAST 报错改成'.'
  • 您是否尝试过将此查询放入 VIEW 并改为调用 VIEW?您是否有权创建视图?
  • @MandyShaw 仅供参考:SSRS 数据集查询可以包含脚本,而不仅仅是单个语句。

标签: sql reporting-services sql-server-2008-r2 ssrs-2008-r2


【解决方案1】:

我的报表服务器连接到生产实例,而不是创建我的函数的测试实例。一旦我更改了正确填充的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多