2012-02-22 14 views
0

電子メールフィールドに多くのNULLを含むテーブルがあります。私がする必要があるのは、すべての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; 

:私はこのコードを発見した

:事前に

感謝

EDIT。

基本的には、ストアドプロシージャを使用する代わりに、select文を使用して必要なすべての電子メールを1行取得するだけで済みます。私が本質的に必要とするのは、返されたこれらの電子メールを1つの行に連結することです。このことから

+0

ストアドプロシージャはどのように電子メールを返しますか? – Lamak

+0

私はこのリンクから試しています:http://www.projectdmx.com/tsql/rowconcatenate.aspxしかし、私はそれを動作させることができません。 @Lamakストアドプロシージャは、単に電子メールの行のリストを返します – seedg

+0

ストアドプロシージャでなければなりませんか? TSQLステートメント内で呼び出すことができるので、ここでUDFを使用する方が便利です –

答えて

4

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

1行に複数の行を変換する - 私は多くの人に電子メールを送信する必要があるとして、SQL Serverの 、私は、セミコロンで区切られた単一の行に複数の電子メールを変換する必要があります(;)私はたくさんのソリューションを持っていましたが、これはより多くのコード行を必要とする古いタイプのソリューションです。私は解決する1つまたは2つのラインコードを使用したいので、私は非常に簡単です私のソリューションのための3つの方法を見つけた。

方法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 row(s)影響を受けています。

のいずれかの方法を実行した後、私は影響

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

1行

CONTACT_EMAIL(S)として結果を得ました。

+0

ありがとうございました!これはまさに私が必要としていたものです。 – seedg

+0

@Chris - 問題はありませんが、Googleにもっと感謝します。「SQL Serverで行を単一の行に変換する」という簡単な検索が結果として得られました。 – JonH

+0

はい私はグーグルではありますが、私がやっていることから変わった投稿で言及したように、私はより複雑な解決策を見出しました。 – seedg

関連する問題