【问题标题】:Parsing from a list in sql从sql中的列表解析
【发布时间】:2016-02-16 20:53:17
【问题描述】:

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

User          Groups
Johnson       DB~LB~AP
Doe           DB~PLA

我需要一个能够列出所有用户和所有关联组的解析函数,如下所示:

User          Groups
Johnson       DB
Johnson       LB
Johnson       AP
Doe           DB
Doe           PLA

我能够找到这个很棒的解析函数 (http://sqlfool.com/2011/05/string-parsing-function/),但我无法为用户列表运行它。我可以一次为一个用户运行解析功能,但我不知道如何通过此功能运行用户列表。

非常感谢任何帮助!

【问题讨论】:

  • 那个解析器有两个相当小的性能问题。它使用了一个不理想的递归 cte。更大的问题是它是一个多语句表值函数,其性能通常比标量函数差。看看这篇文章有几个更好的选择。 sqlperformance.com/2012/07/t-sql-queries/split-strings

标签: sql sql-server string-parsing


【解决方案1】:

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

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

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

【讨论】:

  • 我可能遗漏了一些东西,但是 g(grp) 在做什么?
  • 对了,谢谢!我能够操纵这个查询来做我需要的事情,但我仍然不确定 g(grp) 的目的是什么。
  • @user2572833 为返回的表定义别名,并为该表中的一列指定列名。
  • 完美!事实证明这正是我所需要的。感谢您抽出宝贵时间回复。非常感谢!
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2019-05-21
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多