我有一个表,在电子邮件字段中包含许多NULL。我需要做的是更新所有的NULL行。对于每一个NULL行,我需要执行一个存储过程,该存储过程基本上获取与该用户ID相关的所有电子邮件。因此,对于每个NULL行,都会调用该存储过程,并且需要将该存储过程中找到的所有电子邮件字段连接在一起,并插入到另一个表中的NULL电子邮件字段的位置。
有人知道如何在TSQL中实现这一点吗?
提前感谢
编辑:
我发现了这个代码:
WITH Ranked ( CategoryId, rnk, ProductName )
AS ( SELECT CategoryId,
ROW_NUMBER() OVER( PARTITION BY CategoryId ORDER BY CategoryId ),
CAST( ProductName AS VARCHAR(8000) )
FROM Northwind..Products),
AnchorRanked ( CategoryId, rnk, ProductName )
AS ( SELECT CategoryId, rnk, ProductName
FROM Ranked
WHERE rnk = 1 ),
RecurRanked ( CategoryId, rnk, ProductName )
AS ( SELECT CategoryId, rnk, ProductName
FROM AnchorRanked
UNION ALL
SELECT Ranked.CategoryId, Ranked.rnk,
RecurRanked.ProductName + ', ' + Ranked.ProductName
FROM Ranked
INNER JOIN RecurRanked
ON Ranked.CategoryId = RecurRanked.CategoryId
AND Ranked.rnk = RecurRanked.rnk + 1 )
SELECT CategoryId, MAX( ProductName )
FROM RecurRanked
GROUP BY CategoryId;
然而,在我的情况下,我无法让它发挥作用。
基本上,我可以简单地使用select语句来获取一行所有必要的电子邮件,而不是使用存储过程。我基本上需要做的是将这些返回的电子邮件连接到一行中。
由此:http://geekswithblogs.net/nagendraprasad/archive/2009/03/13/convert-multiple-rows-into-one-row---sql-server.aspx
将多行转换为一行-SQL Server由于我需要向许多人发送电子邮件,我需要将多封电子邮件转换为用分号(;)分隔的一行,我有很多解决方案,但这是一种需要更多代码行的老式解决方案。由于我想使用一两行代码来解决问题,我为我的解决方案找到了三种非常简单的方法。
方法1:
DECLARE @str varchar(4000)
SET @str = (SELECT CONTACT_EMAIL + ';' FROM table FOR XML PATH(''))
SET @str = SUBSTRING(@str,1,LEN(@str)-1)
SELECT @str
方法2:
DECLARE @str varchar(4000)
SELECT @str = COALESCE(@str + ';', '') + CONTACT_EMAIL FROM table
SELECT @str
方法3:
DECLARE @str varchar(4000)
SELECT DISTINCT STUFF( (SELECT CONTACT_EMAIL + ';' from table FOR XML PATH('')),1,1,'')
SELECT @str
返回多行:
CONTACT_EMAIL
abc1@domain.com
abc2@domain.com
abc3@domain.com
3行受影响。
在执行其中一个方法后,我得到的结果是
联系人电子邮件
abc1@domain.com;abc2@domain.com;abc3@domain.com;
1行受影响。