sql - 在 SQL Server 2014 中迭代临时表以构建字符串的最佳方法
问题描述
我创建了一个临时表,想法是我想遍历它,匹配具有相同电子邮件地址的所有记录,然后填充一个字符串,该字符串将进入电子邮件,然后删除表。这将作为存储过程运行。
我使用了一个游标,它首先抓取所有唯一的电子邮件地址,然后合并记录,但可能有 100k-500k 记录的性能将无法接受,而且我知道必须有一种更有效的方法来做到这一点。
示例数据(抱歉,不知道如何正确格式化)
#temptable
temp_email, temp_string
test@test.com string1
test@test.com string2
test2@test.com string3
test2@test.com string4
test3@test.com string5
然后我想用这个数据填充另一个表
emailto... emailbody
test@test.com 'string1<br / > string2'
test2@test.com 'string3<br / > string4'
test3@test.com 'string5'
谢谢你。
解决方案
STUFF
andFOR XML PATH
方法在 SQl Server 2014 及更早版本中很好地实现了这一点。因为你有角色<
,>
但是,他们需要在之后“未转义”:
WITH VTE AS(
SELECT *
FROM (VALUES('test@test.com','string1'),
('test@test.com','string2'),
('test2@test.com','string3'),
('test2@test.com','string4'),
('test3@test.com','string5')) V(Email, String))
SELECT Email,
STUFF(REPLACE(REPLACE((SELECT '<br/>' + sq.String
FROM VTE sq
WHERE sq.Email = V.Email
FOR XML PATH('')),'<','<'),'>','>'),1,5,'')
FROM VTE V
GROUP BY Email;
推荐阅读
- ruby-on-rails - 如何回滚此 Rails 迁移?
- javascript - 在从现有阵列中创建新阵列时需要帮助
- firebase - 从 Firebase 云函数调用时,OAuth2 访问令牌交换失败
- c# - 请求响应对象和内容类型注释约定
- flutter - 如何在一个 ListView 中使用多个 StreamBuilder
- c++ - 结转数据而不使用 for 循环
- python - 使用 plt.plot 绘制图表时遇到问题
- laravel - Laravel 日志文件权限问题
- wordpress - 如何仅重写 Wordpress 主页 url?
- python - 模板文件中的静态块标签无效