1

区切りリストをテーブルに変換する関数があります。

select * from dbo.fn_rpt_ParseValues('abc|123|test','|')

結果:

abc
123
test

各行をSQL​​変数にするにはどうすればよいですか?例えば:

@Name = 'abc'
@Phone = '123'
@Comment = 'test'

ありがとう!

4

3 に答える 3

5
declare @S varchar(100) = 'abc|123|test'

declare @Name varchar(10)
declare @Phone varchar(10)
declare @Comment varchar(10)

select @Name = X.value('x[1]', 'varchar(10)'),
       @Phone = X.value('x[2]', 'varchar(10)'),
       @Comment = X.value('x[3]', 'varchar(10)')
from (select cast('<x>'+replace(@S, '|', '</x><x>')+'</x>' as xml)) as T(X)

select @Name, @Phone, @Comment
于 2012-05-14T15:34:04.703 に答える
1
DECLARE @Split table(
     RowIndex int IDENTITY(1,1)
    ,Item varchar(200));
INSERT INTO @Split 
    SELECT * from dbo.fn_rpt_ParseValues('abc|123|test','|');

DECLARE @Name   varchar(50);
DECLARE @Phone  varchar(50);
DECLARE @Comment varchar(100);
SET @Name   =  (SELECT Item FROM @Split WHERE RowIndex=1);
SET @Phone  =  (SELECT Item FROM @Split WHERE RowIndex=2);
SET @Comment = (SELECT Item FROM @Split WHERE RowIndex=3);
于 2012-05-14T14:16:52.180 に答える
1

行が順序付けられていると仮定して、ピボットを実行して行を列に変換します。

もう1つのオプションは、解析関数(または変更されたバージョン)が単一行の結果セット(テーブル値関数)を返し、CROSS /OUTERAPPLYを使用してそれらを行に追加することです。

http://msdn.microsoft.com/en-us/library/ms174853.aspx

于 2012-05-14T14:20:19.810 に答える