2012-02-22 55 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

相關問題