use*_*031 1 sql-server stored-procedures sql-server-2005 sql-server-2008
我需要编写一个输入为字符串的存储过程。
输入字符串包含变量名及其值,由管道分隔符分隔,如下所示:
Name =Praveen | City=Hyderabad | Mobile=48629387429| Role=User| etc
Run Code Online (Sandbox Code Playgroud)
在存储过程中,我已经声明了像@x, @y, @z, @t
获取值一样的 变量
@x=Praveen (Name value)
@y=Hyderabad (City Value)
@z=48629387429(Mobile Value)
@t=User(Role Value)
Run Code Online (Sandbox Code Playgroud)
输入字符串也可以具有任何顺序的值,例如
City=Hyderabad | Mobile=48629387429 | Role=User | Name =Praveen |etc
Run Code Online (Sandbox Code Playgroud)
一旦我@x, @y, @z, @t
将这些值解析为etc ,我就必须在存储过程中使用这些值。
请告诉我如何解析输入字符串以分别获取Name, City, Mobile, Role
into@x, @y, @z
和的值@t
。
一种可能的解决方案是使用 XML
DECLARE @text VARCHAR(1000)
,@xml xml
SELECT @text = 'City=Hyderabad | Mobile=48629387429 | Role=User | Name =Praveen'
SELECT @text = REPLACE(@text,'|','"')
,@text = REPLACE(@text,'=','="')
,@text = '<row ' + @text + '"/>'
SELECT @xml = CAST(@text AS XML)
select
line.col.value('@Name[1]', 'varchar(100)') AS Name
,line.col.value('@City[1]', 'varchar(100)') AS City
,line.col.value('@Mobile[1]', 'varchar(100)') AS Mobile
,line.col.value('@Role[1]', 'varchar(100)') AS Role
FROM @xml.nodes('/row') AS line(col)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10739 次 |
最近记录: |