我有一个看起来像这样的字符串:
'1.25,5.34,6.9,8.6547,2.3'
我想像这样将每个逗号分隔的值存储到变量中,但是要在T-SQL中以编程方式存储:
Declare @Var1 float
Set @Var1 = 1.25
...
@Var2 = 5.34
@Var3 = 6.9
以此类推。
我该怎么办?
答案 0 :(得分:4)
转换为JSON
也许最简单的解决方案是将字符串转换为JSON数组并按位置访问项目:
declare @text varchar(200)='1.25,5.34,6.9,8.6547,2.3'
declare @json varchar(202)='[' + @text + ']'
declare @var1 numeric(18,5)= JSON_VALUE(@json,'$[0]')
declare @var2 numeric(18,5)= JSON_VALUE(@json,'$[1]')
select @var1,@var2
存储在表变量中但丢失订单
基于集合的解决方案是将项目存储在表变量中但是订单可能会丢失,正如Raymond Nijland指出的那样:
declare @text varchar(200)='1.25,5.34,6.9,8.6547,2.3'
declare @values table (id int identity,val varchar(20))
insert into @values (val)
select trim(value) from STRING_SPLIT(@text,',') x
insert into SomeTable (value1)
select val
from @values where ID=1
使用ORDER BY可以强制执行的唯一顺序是升序或降序,这假定输入的顺序无关紧要。不是很有帮助。
答案 1 :(得分:2)
如果您有固定数量的变量,则可以使用一些XML
addMenu (mainmenu): Observable<Mainmenu> {
return this.http.post<Mainmenu>(apiUrl, mainmenu, httpOptions).pipe(
tap((mainmenu: Mainmenu) => console.log(`added mainmenu w/ id=${mainmenu._id}`)),
catchError(this.handleError<Mainmenu>('addMenu'))
);
}