Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从sql中的列表进行解析_Sql_Sql Server_String Parsing - Fatal编程技术网

从sql中的列表进行解析

从sql中的列表进行解析,sql,sql-server,string-parsing,Sql,Sql Server,String Parsing,我目前有一个db表,其中列出了一名员工及其权限,如下所示: User Groups Johnson DB~LB~AP Doe DB~PLA 我需要一个能够列出所有用户和所有关联组的解析函数,如下所示: User Groups Johnson DB Johnson LB Johnson AP Doe DB Doe PLA 我能够找到这个很棒的解析函数(

我目前有一个db表,其中列出了一名员工及其权限,如下所示:

User          Groups
Johnson       DB~LB~AP
Doe           DB~PLA
我需要一个能够列出所有用户和所有关联组的解析函数,如下所示:

User          Groups
Johnson       DB
Johnson       LB
Johnson       AP
Doe           DB
Doe           PLA
我能够找到这个很棒的解析函数(),但是我无法为用户列表运行它。我可以一次为一个用户运行解析函数,但如何通过该函数运行用户列表却让我感到困惑


非常感谢您的帮助

您应该能够像这样使用该功能:

select t.user, g.grp
from t cross apply
     dbo.dba_parseString_udf(t.groups, '~') g(grp);

您确实需要在当前数据库的dbo模式中定义函数。

您应该能够像这样使用该函数:

select t.user, g.grp
from t cross apply
     dbo.dba_parseString_udf(t.groups, '~') g(grp);

您确实需要在当前数据库的dbo模式中定义函数。

该解析器有两个相当大的性能问题。它使用的是不理想的递归cte。更大的问题是,它是一个多语句表值函数,其性能通常比标量函数差。看看这篇文章,有几个更好的选择。该解析器有两个相当大的性能问题。它使用的是不理想的递归cte。更大的问题是,它是一个多语句表值函数,其性能通常比标量函数差。看看这篇文章,有几个更好的选择。我可能遗漏了什么,但是g(grp)在做什么?顺便说一下,谢谢!我能够操作这个查询来完成我所需要的工作,但我仍然不确定g(grp)的用途。@user2572833为返回的表定义了一个别名,并为该表中的一列指定了一个列名。太好了!事实证明这正是我需要的。感谢您花时间回复。非常感谢!我可能遗漏了什么,但是g(grp)在做什么?顺便说一下,谢谢!我能够操作这个查询来完成我所需要的工作,但我仍然不确定g(grp)的用途。@user2572833为返回的表定义了一个别名,并为该表中的一列指定了一个列名。太好了!事实证明这正是我需要的。感谢您花时间回复。非常感谢!