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模式,使用示例数据和预期结果。表类型参数远高于这里的最佳解决方案。