разделить 10 электронных писем из списка электронной почты с 30, с 10 на 10 с - PullRequest
0 голосов
/ 31 октября 2011

В моем запросе есть список электронных писем с более чем 30 электронными письмами.

Print @Emails

Результат: email1 [a] test.com; Email2 [а] test.com; ...; email35 [а] test.com;

Мне нужно отправить от 10 до 10. Мне нужно взять 10 из этого списка, чтобы отправить.

Как это можно сделать с SQL Server?

1 Ответ

0 голосов
/ 31 октября 2011

Попробуйте этот sql, он использует Common Table Expressions (CTE) для зацикливания входного значения, есть другие доступные методы, но это должно удовлетворить ваши потребности, если вы хотите разбить строковый ввод и преобразовать его в таблицу:

DECLARE @DemoTable table (Layout varchar(2000)) 
INSERT @DemoTable VALUES ('email1[a]test.com;email2[a]test.com;email3[a]test.com;email4[a]test.com;email5[a]test.com;email6[a]test.com;email7[a]test.com;email8[a]test.com;email9[a]test.com;email10[a]test.com;email11[a]test.com;email12[a]test.com;email13[a]test.com;email14[a]test.com;email15[a]test.com;email16[a]test.com;email17[a]test.com;email18[a]test.com;email19[a]test.com;email20[a]test.com;email21[a]test.com;email22[a]test.com;email23[a]test.com;email24[a]test.com;email25[a]test.com;email26[a]test.com;email27[a]test.com;email28[a]test.com;email29[a]test.com;email30[a]test.com;email31[a]test.com;email32[a]test.com;email33[a]test.com;email34[a]test.com;email35[a]test.com;') 

DECLARE @StringToTable table (email varchar(200)) 
DECLARE @Concatenated VARCHAR(2000)
SET @Concatenated=''
;WITH StringToTable AS 
(   SELECT LEFT(Layout,CHARINDEX(';',Layout)) AS Email 
        ,  RIGHT(Layout,LEN(Layout)-CHARINDEX(';',Layout)) StringToProcess 
    FROM @DemoTable 
    WHERE Layout IS NOT NULL AND CHARINDEX(';',Layout)>0 
    UNION ALL 
    SELECT LEFT(StringToProcess,CHARINDEX(';',StringToProcess)) 
        ,  RIGHT(StringToProcess,LEN(StringToProcess)-CHARINDEX(';',StringToProcess)) 
    FROM StringToTable 
    WHERE StringToProcess IS NOT NULL AND CHARINDEX(';',StringToProcess)>0 
) 
INSERT INTO @StringToTable(email)
SELECT TOP 10 Email FROM StringToTable--TOP 10 is to get the 10 mentioned in the question - you can change the order by to affect which 10 you wish to use.

SELECT Email  FROM @StringToTable

Если вам нужно реинтегрировать строки в строку, вы можете сделать это следующим образом:

SELECT @Concatenated = @Concatenated + Email  FROM @StringToTable

SELECT @Concatenated
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...