首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL高效地将5个逗号分隔字符串解析到表中。

T-SQL高效地将5个逗号分隔字符串解析到表中。
EN

Stack Overflow用户
提问于 2012-02-03 02:42:17
回答 2查看 578关注 0票数 1

我已经尝试了很多方法来拼凑这些东西,但是我需要关于完成我的任务的最有效方法的建议。

我正在编写一个从前端传递5个变量的过程。每个变量都是多达3118个逗号分隔元素的varchar。我需要把这些转到桌子上,然后以高效的方式返回。

我找到了解析例程和旋转方法,以及使用CTE和临时表及表变量的方法。

下面的例子只是一个例子--在现实生活中,这些字符串可能会变得相当长。所以我希望避免长时间的实验,看看你们能不能给我指明应对挑战的最佳方法。

-*-从以下几点开始:

代码语言:javascript
复制
declare @decimal varchar(50), @binary varchar(50), @primes varchar(50), @hex varchar(50), var5 varchar(50)

set @decimal = '1,2,3,4,5'
set @binary = '1,2,4,8,16'
set @primes = '1,2,3,5,7,11'
set @hex = '1','16','256','4096'
set @ancient = 'one','two','many' 

-创建一个输出表,如下所示:

代码语言:javascript
复制
declare @results table (id int identity(1,1),  [integer] varchar(1), [binary] varchar(1), prime varchar(50), hex varchar(50), ancient varchar (50))

id  integer  binary  prime  hex    ancient
1   1        1       1      1      one
2   2        2       2      16     two
3   3        4       3      256    many
4   4        8       5      4096   null
5   5        16      7      null   null
6   null     null    11     null   null

--*

EN

回答 2

Stack Overflow用户

发布于 2012-02-03 09:01:06

我将使用如下所示的XML参数。

代码语言:javascript
复制
<r>
  <i>1</i>
  <b>1</b>    
  <p>1</p>
  <h>1</h>
  <a>one</a>
</r>
<r>
  <i>2</i>
  <b>2</b>    
  <p>2</p>
  <h>16</h>
  <a>two</a>
</r>

然后像这样插入到表变量中。

代码语言:javascript
复制
insert into @results([integer], [binary], prime, hex, ancient)
select T.N.value('i[1]', 'varchar(1)'),
       T.N.value('b[1]', 'varchar(1)'),
       T.N.value('p[1]', 'varchar(50)'),
       T.N.value('h[1]', 'varchar(50)'),
       T.N.value('a[1]', 'varchar(50)')
from @xml.nodes('/r') as T(N)

根据我的经验,这是足够有效的。在Server 2008中,您可以使用表值参数代替。我没有用过它,所以我不能告诉你它的性能是否更好。

票数 2
EN

Stack Overflow用户

发布于 2012-02-03 08:52:32

您也许可以考虑为您调用一个程序集来进行此解析。下面是一个教程,一些关于MSDN的文档和另一个示例这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9123020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档