Разбор QueryString в SQL Server 2005 - PullRequest
       17

Разбор QueryString в SQL Server 2005

1 голос
/ 24 января 2012

Есть ли простой способ анализа параметров QueryString (например, foo = bar & temp = baz) в SQL Server?

В конце концов мне нужна таблица с парами имя / значение.

| foo  | bar |
| temp | baz |

Хотя в приведенном выше примере это будет просто, становится труднее, если строки начинают содержать экранированные символы (например,% 3D), и еще сложнее, когда задействован UTF-8.

Любое существующеерешения?Реализация URLDecode для SQL Server была бы раем на земле.

1 Ответ

6 голосов
/ 10 апреля 2012

Так что для разбора строки запроса просто используйте CTE в функции. Вот код.

CREATE 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
)
GO

declare @queryString varchar(2048)
set @queryString = 'foo=bar&temp=baz&key=value';
SELECT *
  FROM dbo.SplitQueryString(@queryString)
OPTION(MAXRECURSION 0);

при запуске выдает следующий вывод.

keyName  keyValue
-------  --------
foo      bar
temp     baz
key      value
(3 row(s) affected)

Я считаю, что это будет именно то, что вы просите.

...