2012-02-22 3 views
0

У меня есть таблица, содержащая множество NULL в поле электронной почты. Мне нужно обновить все строки NULL. Для каждой строки NULL мне нужно вынести хранимую процедуру, которая в основном получает все электронные письма, связанные с идентификатором этого пользователя. Поэтому для каждой строки NULL эта хранимая процедура вызывается, и все поля электронной почты, найденные в этой хранимой процедуре, должны быть объединены вместе и вставлены вместо поля NULL электронной почты из другой таблицы.Объединение строк из хранимой процедуры в другую таблицу в TSQL

Кто-нибудь знает, как реализовать это в TSQL?

Большое спасибо заранее

EDIT:

Я нашел этот код:

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

+0

Я пытаюсь по этой ссылке: http://www.projectdmx.com/tsql/rowconcatenate.aspx, но я не могу заставить его работать. @Lamak Хранимая процедура просто возвращает список строк с адресами электронной почты – seedg

+0

, должен ли он быть сохраненным proc? UDF был бы более полезен здесь, поскольку он может быть вызван внутри оператора TSQL. –

ответ

4

Отсюда: 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 
[email protected] 
[email protected] 
[email protected] 

3 ряд (-ы) поврежден.

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

CONTACT_EMAIL

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

1 строк (ы) пострадавших.

+0

Спасибо! Это именно то, что мне нужно, и это сработало. – seedg

+0

@Chris - не проблема, но спасибо google больше.Результатом этого стал простой поиск «Преобразование строк в одну строку в SQL-сервере». – JonH

+0

Да, я googled, но я нашел более сложные решения, как я упоминал в сообщении, которое варьировалось от того, что я пытался сделать. – seedg

Смежные вопросы