sql-server - SQL Server - 具有未知数量的多个值的参数
问题描述
我正在创建一个包含两列的网格:Name
和HotelId
. 问题是该网格的数据应该使用单个参数发送,VARCHAR type
并且应该如下所示:
@Parameter = 'Name1:5;Name2:10;Name3:6'
如您所见,该参数包含名称和一个表示 ID 值的数字,您可以有多个此类条目,以“ ; ”符号分隔。
我的第一个想法是编写一个查询,创建一个temp table
有两列的查询,并用参数中的数据填充它。
我怎么能做到这一点?似乎我需要将参数拆分两次:每行使用“ ; ”符号,然后每列使用“ : ”符号。我应该如何处理这个?
另外,如果有任何其他更合适的解决方案,我愿意接受建议。
解决方案
如果存在,首先删除#temp 表...
IF OBJECT_ID('tempdb..#temp', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE #temp
然后创建#temp table
CREATE TABLE #temp (v1 VARCHAR(100))
宣布所有@Paramter....
DECLARE @Parameter VARCHAR(50)
SET @Parameter= 'Name1:5;Name2:10;Name3:6'
DECLARE @delimiter nvarchar(1)
SET @delimiter= N';';
在这里,使用 ' 将所有@parameter
值插入 #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
将值插入表后#temp
..将所有值放入' : '分隔...
select Left(v1, CHARINDEX(':', v1)-1) as Name , STUFF(v1, 1, CHARINDEX(':', v1), '') as HotelId FROM #temp
然后你会得到这种类型的输出
推荐阅读
- kubernetes - 从创造的资源中提取价值
- javascript - 如何编写 n 选择自定义钩子(反应本机钩子)
- python-3.x - 过滤没有任何 NaN 的行,并且日期在 Pandas 中是连续的
- c# - 使用堆栈的 C# 解决方案
- python - 无法理解在 if...else... 语句 Python 中使用的逻辑表达式
- c# - 用于渲染表格单元格/行结构的 GridView 的渲染逻辑位于何处?
- php - 当我尝试为登录表单运行 PDO 代码时出现错误
- c# - DataService 授权标头 SendingRequest2 在本地工作,但不在测试服务器上
- css - “日期”类型的离子输入具有错误颜色的日历图标
- java - 在 cron 下运行时 Java 作业不写入文件