Sql server 解析SQL Server表中的URL以提取键和值对

Sql server 解析SQL Server表中的URL以提取键和值对,sql-server,Sql Server,我有一个带有URL字段的表。它包含来自客户站点的随机URL。我想从那些有查询字符串的URL中提取键和值。例如,如果我有: 我需要存储过程在结果中返回一个键和值 EdpNo=2580461 sku=B69-1412 SRCCODE=CANEMBP004 cm_mmc=Email-_-Retro-_-CANEMBP004-_-viewed 其中,EdpNo是键,2580461是第一个示例中的值 我已经看过一些用户定义的函数,但它们都致力于一次只传入一个url,我需要扫描表中的url字段 也许我只

我有一个带有URL字段的表。它包含来自客户站点的随机URL。我想从那些有查询字符串的URL中提取键和值。例如,如果我有:

我需要存储过程在结果中返回一个键和值

EdpNo=2580461
sku=B69-1412
SRCCODE=CANEMBP004
cm_mmc=Email-_-Retro-_-CANEMBP004-_-viewed
其中,
EdpN
o是键,
2580461
是第一个示例中的值

我已经看过一些用户定义的函数,但它们都致力于一次只传入一个url,我需要扫描表中的url字段

也许我只是不知道如何使用它们,所以任何关于我所拥有的或者如何重组它的见解都将不胜感激

UDF:


如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您可能需要查看
APPLY
操作符,以便一次处理整个表<代码>从交叉应用[dbo].[SplitQueryString]()中选择splits.keyname,splits.keyvalue作为splits是您正在寻找的语法类型使用正则表达式来解析tsql代码。您可能已经意识到这一点,但这类操作的性能将很差。SQL Server将对您的表执行表扫描,并使用您的UDF解析每个URL(UDF反过来使用迭代/递归查询)。如果您的表很大,则使用SQL Server执行此操作需要很长时间。如果你有能力使用CLR程序来做这件事,那么你就想把这条路线当作一个选项。@死区谢谢,我正在看另一种不依赖于SQL Server表扫描的方法…JavaScript函数来拉键值,然后我将把它存储在一个表中。
ALTER FUNCTION [dbo].[SplitQueryString] (@s varchar(8000))
RETURNS table
AS
RETURN (
    WITH splitter_cte AS (
      SELECT CHARINDEX('&', @s) as pos, 0 as lastPos
      UNION ALL
      SELECT CHARINDEX('&', @s, pos + 1), pos
      FROM splitter_cte
      WHERE pos > 0
      ),
    pair_cte AS (
    SELECT chunk,
           CHARINDEX('=', chunk) as pos
    FROM (
        SELECT SUBSTRING(@s, lastPos + 1,
                         case when pos = 0 then 80000
                         else pos - lastPos -1 end) as chunk
        FROM splitter_cte) as t1
  )
    SELECT substring(chunk, 0, pos) as keyName,
           substring(chunk, pos+1, 8000) as keyValue
    FROM pair_cte
);