2012-02-22 49 views
0

我有一个表,其中包含邮件字段中的大量空值。我需要做的是更新所有的NULL行。对于每一个NULL行,我需要执行一个存储过程,它基本上获取与该用户ID相关的所有电子邮件。因此,对于每个NULL行,调用此存储过程,并且此存储过程中找到的所有电子邮件字段需要连接在一起,并插入到另一个表中的NULL电子邮件字段的位置。将存储过程中的行连接到TSQL中的另一个表上

任何人都知道如何在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语句获得一行所有必要的电子邮件。我基本上需要做的是将这些返回的邮件连接成一行。

+0

您的存储过程如何返回电子邮件? – Lamak 2012-02-22 13:13:23

+0

我想从这个链接:http://www.projectdmx.com/tsql/rowconcatenate.aspx,但我无法得到它的工作。 @Lamak存储过程只是返回一个包含电子邮件的行列表 – seedg 2012-02-22 13:22:08

+0

它必须是存储过程吗? UDF在这里更加有用,因为它可以在TSQL语句中调用 – 2012-02-22 13:30:29

回答

4

从这:http://geekswithblogs.net/nagendraprasad/archive/2009/03/13/convert-multiple-rows-into-one-row---sql-server.aspx

转换多行成一个 - SQL服务器 当我需要发送电子邮件到很多人,我需要多封邮件转换成由分号分隔单行(;) ,我有很多解决方案,但这是一种旧式的解决方案,需要更多的代码行。因为我想要使用一行或两行代码来解决这个问题,所以我找到了三种解决方法,非常简单。

方法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 
[email protected] 
[email protected] 
[email protected] 

3排(s)受影响。

执行的方法之一后,我得到该结果作为

CONTACT_EMAIL

[email protected];[email protected];[email protected]; 

1行(一个或多个)的影响。

+0

谢谢!这正是我所需要的,它的工作。 – seedg 2012-02-22 13:31:56

+0

@Chris - 没问题,但多谢谷歌。简单搜索“在sql server中将行转换为单行”产生了这个结果。 – JonH 2012-02-22 13:40:58

+0

是的,我使用了Google搜索,但是我发现更复杂的解决方案,正如我在帖子中提到的,这与我正在尝试做的不同。 – seedg 2012-02-22 13:45:06

相关问题