Sql server SQL Server-多个值的数目未知的参数

Sql server SQL Server-多个值的数目未知的参数,sql-server,reporting-services,Sql Server,Reporting Services,我正在创建一个包含两列的网格:Name和HotelId。问题在于,此网格的数据应使用VARCHAR类型的单个参数发送,并且应如下所示: @Parameter = 'Name1:5;Name2:10;Name3:6' 如您所见,参数包含名称和表示ID值的数字,您可以有多个这样的条目,用“;”符号分隔 我的第一个想法是编写一个查询,创建一个包含两列的temp表,并用参数中的数据填充它 我怎样才能做到这一点?似乎我需要将参数拆分两次:每行按“;”符号,然后每列按“:”符号。 我应该如何处理这个问题

我正在创建一个包含两列的网格:
Name
HotelId
。问题在于,此网格的数据应使用
VARCHAR类型的单个参数发送,并且应如下所示:

@Parameter = 'Name1:5;Name2:10;Name3:6'
如您所见,参数包含名称和表示ID值的数字,您可以有多个这样的条目,用“”符号分隔

我的第一个想法是编写一个查询,创建一个包含两列的
temp表
,并用参数中的数据填充它

我怎样才能做到这一点?似乎我需要将参数拆分两次:每行按“”符号,然后每列按“”符号。 我应该如何处理这个问题

此外,如果还有其他更合适的解决方案,我愿意接受建议。

首先删除临时表(如果存在)…

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE #temp
然后创建
#临时表

CREATE TABLE #temp (v1 VARCHAR(100))
声明所有
@parameter….

DECLARE @Parameter VARCHAR(50)
SET @Parameter= 'Name1:5;Name2:10;Name3:6'
DECLARE @delimiter nvarchar(1) 
SET @delimiter= N';';
在这里,使用“”将所有
@参数
值插入#temp表“分离…”

INSERT INTO #temp(v1)
SELECT * FROM(

SELECT v1 = LTRIM(RTRIM(vals.node.value('(./text())[1]', 'nvarchar(4000)')))
FROM (
    SELECT x = CAST('<root><data>' + REPLACE(@Parameter, @delimiter, '</data><data>') + '</data></root>' AS XML).query('.')
) v
CROSS APPLY x.nodes('/root/data') vals(node)
)abc
然后您将获得这种类型的输出

首先删除临时表(如果存在)…

IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE #temp
然后创建
#临时表

CREATE TABLE #temp (v1 VARCHAR(100))
声明所有
@parameter….

DECLARE @Parameter VARCHAR(50)
SET @Parameter= 'Name1:5;Name2:10;Name3:6'
DECLARE @delimiter nvarchar(1) 
SET @delimiter= N';';
在这里,使用“”将所有
@参数
值插入#temp表“分离…”

INSERT INTO #temp(v1)
SELECT * FROM(

SELECT v1 = LTRIM(RTRIM(vals.node.value('(./text())[1]', 'nvarchar(4000)')))
FROM (
    SELECT x = CAST('<root><data>' + REPLACE(@Parameter, @delimiter, '</data><data>') + '</data></root>' AS XML).query('.')
) v
CROSS APPLY x.nodes('/root/data') vals(node)
)abc
然后您将获得这种类型的输出


听起来您应该使用表类型参数或字符串拆分器;这两个都有100个这样的例子。就我个人而言,我推荐前者。添加模式,使用示例数据和预期结果。表类型参数远高于这里的最佳解决方案。听起来您应该使用表类型参数或字符串拆分器;这两个都有100个这样的例子。就我个人而言,我建议使用前一个.add模式,使用示例数据和预期结果。表类型参数远高于这里的最佳解决方案。