Объединение строк из хранимой процедуры в другую таблицу в TSQL - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть таблица, которая содержит много пустых значений в поле электронной почты.Что мне нужно сделать, это обновить все строки NULL.Для каждой строки NULL мне нужно представить хранимую процедуру, которая в основном получает все электронные письма, связанные с идентификатором этого пользователя.Поэтому для каждой строки 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, чтобы получить одну строку со всеми необходимыми электронными письмами.По сути, мне нужно объединить эти возвращенные письма в одну строку.

1 Ответ

4 голосов
/ 22 февраля 2012

Отсюда: 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 строки затронуты.

После выполнения одного из методов, я получил результат как

CONTACT_EMAIL

abc1@domain.com;abc2@domain.com;abc3@domain.com;

1 строка (ий) затронуты.

...