クエリ文字列を解析するには、関数内で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)
私はこれがあなたが求めていることを正確に行うと信じています。
関連スレッド - http://stackoverflow.com/questions/3833229/sql-server-url-decoding – adatapost
TSQLよりもCLR統合に適していると思われます。または、データを提出する前にアプリケーションで実行できないことがありますか? –
私は古代のClassicASPウェブショップシステムを扱っています。データをDBに書き込むルーチンを変更することもできますが、他の場所で何が破壊されるかはわかりません...後で... – BlaM