2011-12-06 7 views
1

私は複雑なselect文(いくつかのクエリの和集合)を持っています。selectカラム出力をsp_send_dbmailのセミコロン区切りリストに変換します。

私はセミコロンが必要sp_send_dbmailの@blind_copy_recipientsにこれを供給したい
| email   | 
| [email protected] | 
| [email protected] | 
| [email protected] | 

は(;)リストを分離しました。

は通常、これを達成するためにCOALESCEと変数を使用しますが、UNIONSのステートメントではそうすることはできません。

これを行う簡単な方法はありますか?

答えて

1

可能な限りカーソルを避けてください。

一方で、これを試してみてください。

DECLARE @blind_copy_recipients VARCHAR(4000) 
-- Or whatever is the suitable size you expect 

SELECT @blind_copy_recipients = COALESCE(@blind_copy_recipients + ', ', '') + 
    CAST(BCC.BLIND_COPY_RECIPIENTS_UNION_OUTPUT_COLUMN AS VARCHAR(50)) 
    -- Again, change to suit your needs 
FROM 
(
-- SELECT UNION SELECT UNION SELECT UNION -- 
) AS BCC 

SELECT @blind_copy_recipients 
1
.....この質問は、より良い方法は、レコードを順番にカーソルを使用することで、個別にメッセージを送信するかもしれないと私には発生していているが、私はまだ答えに興味が入力しながら、

2つの方法で行うことができます。

  1. ユニオンの結果をテンポラリテーブルに入れます。
  2. COALESCEを使用してください。

または

  1. サブクエリとして結果組合を使用してください。
  2. COALESCEを使用してください。
+0

おそらく利用する必要はありませんサブクエリのように扱われた場合は、ユニオンからそれをつかむことができますか?または、より高価なサブクエリをつかんでいますか? – Nonym

+0

@ノームあなたが正しいです、私は答えをedittedしました。サブクエリがどれほど「広大であるか」に応じて、それが可能です。 –

1

CTEでselectを固定しますか?

declare @addr varchar(1024) = '' 
;with T(addr) as (
    select email from emails where id = 1 
    union 
    select email from moreemails where id = 1 
    ... 
) 
select @addr += case @addr when '' then '' else ';' end + addr from T 
-1

あなたは一時テーブルに連合結果を保存することができます。

0

T-SQLでは、この

declare @result nvarchar (max) 
set @result = '' 

select @result = coalesce (
        case when @result = '' 
        then YourColumnName 
        else @result + ',' + YourColumnName 
        end 
       ,'') 
from dbo.YourTableName 

print @result 
0

They are severalt methods to achieve thisようCOALESCEを使用することができます。 'ブラックボックスは、XMLメソッド' ここで、templeateそのうちの一つである:あなたのスキーマについては

SELECT p1.CategoryId, 
      (SELECT ProductName + ',' 
       FROM Northwind.dbo.Products p2 
      WHERE p2.CategoryId = p1.CategoryId 
      ORDER BY ProductName 
       FOR XML PATH('')) AS Products 
     FROM Northwind.dbo.Products p1 
    GROUP BY CategoryId ; 

:ここ

SELECT email + ',' 
    FROM yourComplexQuery p2 
    FOR XML PATH('') ; 

サンプル:http://data.stackexchange.com/stackoverflow/q/120618/

関連する問題