【问题标题】:SSRS Report Error Multiple parameter selection -Incorrect Syntax near ','SSRS 报告错误多参数选择 - ',' 附近的语法不正确
【发布时间】:2016-04-05 16:20:13
【问题描述】:

我的以下代码在 SSMS 中运行良好,但在“,”数据集附近使用 SSRS 错误语法执行时出现错误。我正在尝试通过 SSRS 选择多个参数。

谁能指导一下?

下面是我的代码

Declare @Startdate datetime
Declare @Enddate datetime
Declare @Debug int=0
Declare @TimeZone int=330
Declare @OrganizationId int
Declare @OrganizationName varchar(320)

Set @Startdate ='2016-03-08 00:00:00'
Set @Enddate ='2016-03-09 00:00:00'
--Set @OrganizationName=@POrganization

Declare @Orgname varchar(100) 
declare @OrganizationIds int
set @Orgname='Root Org,Maersk Line'
Declare @place TABLE(ID INT IDENTITY,Places varchar(100))
insert into @place (Places) values(@Orgname)
--select * from @place

Declare @RawData Table 
(
    ROWID int identity(1,1) primary key,
    OrgId int,
    Orgname varchar(100) 
)


;WITH SplitSting AS
(

     SELECT
            ID,LEFT(Places,CHARINDEX(',',Places)-1) AS Part
            ,RIGHT(Places,LEN(Places)-CHARINDEX(',',Places)) AS Remainder
        FROM @place
        WHERE Places IS NOT NULL AND CHARINDEX(',',Places)>0
    UNION ALL
    SELECT
        ID,LEFT(Remainder,CHARINDEX(',',Remainder)-1)
            ,RIGHT(Remainder,LEN(Remainder)-CHARINDEX(',',Remainder))
        FROM SplitSting
        WHERE Remainder IS NOT NULL AND CHARINDEX(',',Remainder)>0
    UNION ALL
    SELECT
        ID,Remainder,null
        FROM SplitSting
        WHERE Remainder IS NOT NULL AND CHARINDEX(',',Remainder)=0
)

--select  * from SplitSting
insert into @RawData(OrgName,OrgId)
SELECT S.Part,O.ID FROM SplitSting S 
JOIN ORGANIZATION O
ON S.Part=O.NAME

--select * from @RawData

DECLARE @RowCount INT
Declare @String varchar(100)
SELECT @RowCount = COUNT(*) FROM @RawData

WHILE (@RowCount>0)
BEGIN
       set @String=convert(varchar,@OrganizationIds)+','
         If (@RowCount>0)
         Begin  

            PRINT 'Loop Sequence : ' + convert(varchar,@RowCount)  + ' '

            set  @OrganizationIds = (SELECT  OrgId FROM @RawData WHERE ROWID = @RowCount)
                PRINT 'Orgid Inside Loop:' +  Convert(varchar,@OrganizationIds)



End


          Set @RowCount = @RowCount-1


Set  @OrganizationIds =  convert(varchar,@OrganizationIds) 

PRINT 'Orgid Outside Loop:'+   convert(varchar,@OrganizationIds)
set @String=@String + Convert(varchar,@OrganizationIds) 

END
PRINT 'String Value Outside Loop: ' + @String

Declare  @TempData Table
(

    OrganizationID int
)
insert into @TempData(OrganizationID)
EXEC GetFormsData_Organization @String

【问题讨论】:

  • 一个问题可能是您在没有指定长度的情况下调用convert(varchar,....)The default length is 30 in SQL Server 未指定时,可能某些查询被切断。不知道为什么它会在 SSMS 而不是其他地方工作。
  • 此外,每次返回循环顶部时,您都会将 @String 重置为 @OrganizationIds + ',',您将只打印序列中的最后两个数字。
  • SSRS 不只是期待一个select 声明吗?我认为您需要一个存储过程。

标签: sql-server reporting-services msbi


【解决方案1】:

我不确定这段代码到底在做什么。我没有仔细阅读它。
但是正如您所说,这在 SSMS 中运行良好,那么如何将此代码放在 SQL Server 中的 表值函数 中,然后使用 SSRS 数据集中的参数调用该函数。

如果您需要更多帮助,请告诉我。

【讨论】:

  • 谢谢...你能详细解释一下我如何使用表值函数来做到这一点吗?
  • 基本上,在 SSMS 中 DatabaseName--> Programmability --> Functions --> Table-valued Functions ,您创建一个函数,例如 XYZ(parameter1, parameter2, .... ) { > } 然后在你的数据集中你可以做 Select * from Databasename,.XYZ(parameter1, parameter2 ... ) 这个链接应该有帮助 - technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多