我是学习微软技术的新手。 我在sql server中遇到了一个需要你帮助的问题。
好吧,我有一个格式低于的XML文件, 请看它供您参考
<Permissions><Denied><User/><Roles/><Groups/></Denied><Allowed><Users/><Roles>admin,user,reader,writer,</Roles><Groups/></Allowed></Permissions>
我需要读取Roles节点值并将这些逗号分隔值作为单行插入,我将把permissionid作为存储过程中的参数传递。
这是表格列(我需要在基于transitionid的测试表中为单行插入单个角色)
create table test
(
empid int identity(1,1),
roles varchar(40),
transitionid int
)
答案 0 :(得分:0)
这里有两个问题:从XML获取数据并将其拆分。
如果你正在使用SQL 2016,那么你很幸运 - 有一个新的STRING_SPLIT函数。你可以像这样使用它:
declare @xml xml = '<Permissions><Denied><User/><Roles/><Groups/></Denied><Allowed><Users/><Roles>admin,user,reader,writer,</Roles><Groups/></Allowed></Permissions>';
declare @test table
(
empid int identity(1,1),
roles varchar(40),
transitionid int
)
INSERT @test (roles)
select b.value
FROM @xml.nodes('//Roles/text()')x(csv)
CROSS APPLY STRING_SPLIT(CAST(x.csv.query('.') AS VARCHAR(MAX)), ',')b
where b.value <> ''
select * from @test
否则,您必须使用自定义字符串拆分方法执行类似操作,您可以找到有关How do I split a string so I can access item x?或https://sqlperformance.com/2012/07/t-sql-queries/split-strings的更多信息 - 基本上,两者都需要编写自定义T-SQL函数或导入SQL Server的CLR代码。然后,您可以使用与上面相同的方法(将STRING_SPLIT
替换为自定义字符串拆分函数的名称)。