将存储过程中的行连接到TSQL中的另一个表上



我有一个表,在电子邮件字段中包含许多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行受影响。

最新更新