sql - 我可以避免在这里使用游标吗?

标签 sql sql-server tsql sql-server-2008

所以这里是起点

CREATE TABLE #Data (  
  ID      INT IDENTITY(1,1),  
  MyData  VARCHAR(200)  
)   

INSERT INTO #Data (Data) VALUES ('Test123, Test678')  
INSERT INTO #Data (Data) VALUES ( 'abcd, efgh, mnop')  

我想从 MyData 列解析逗号分隔的数据并将其关联回相关 ID。所以最后的结果会是

ID  ParsedData
--------------
1  Test123  
1  Test678  
2  abcd  
2  efgh  
2  mnop  

我可以通过游标来做到这一点,但我想避免它。有没有更好的方式来为它编写查询?

最佳答案

执行此操作的最佳方法是 much controversy 的主题并且还取决于字符串的长度、分隔符的频率、并发使用、并行计划的适用性、结果是否将用于 JOIN 操作...

Erland Sommarskog does some performance tests here .

我已经链接到下面使用数字表的 Adam Machanic 的 TSQL 拆分函数。上面的链接中还有一个负载。

1. Create a numbers table

2. Create a split function

SELECT ID,OutParam 
FROM #Data
CROSS APPLY dbo.SplitString(MyData,',')

关于sql - 我可以避免在这里使用游标吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156787/

相关文章:

sql-server-2005 - T-SQL CTE错误: Types don't match between the anchor and the recursive part

sql - 无法从 Azure 逻辑应用调用 SPROC - 找不到参数的语法

sql - 在存储过程结束时显式删除本地临时表有什么好处?

sql-server - 在日志传送场景中是否可以使辅助服务器只读?

sql-server - 从 sql 列中的 xml 中提取值和属性

sql-server - T-SQL : Opposite to string concatenation - how to split string into multiple records

sql - 当较早时间戳不存在条目时,从 sql 操作中排除行

sql - 获得全部时间

php - 在 SQL 注入(inject)中使用嵌套 SQL 子查询

sql-server - 用 TSQL 替换字符串中的每个第二个字符实例