解析字符串的存储过程

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

Eri*_*icZ 5

一种可能的解决方案是使用 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)

  • 对我来说,这是一个相当简单的解决方案,理想情况下,您的关系数据库不应该被迫这样做。 (3认同)