Создание списка разделенных запятой значений?

Вы не должны использовать потоки вообще для этого. Это - тривиальная задача для , скрутил , и это, вероятно, возьмет Вас значительно далее так или иначе.

Использование только один поток, и имеют завершение триггера запроса событие, чтобы сделать запись.

скрученный будет заботиться о планировании, обратных вызовах, и т.д.... для Вас. Это вручит Вам весь результат как строку, или можно выполнить его через потоковый процессор (я имею программный интерфейс Твиттера и friendfeed API, что оба исчерпывают события вызывающим сторонам, поскольку результаты все еще загружаются).

В зависимости от того, что Вы делаете со своими данными, Вы могли просто вывести полный результат в sqlite, поскольку это завершено, приготовьте его и выведите его или приготовьте его, в то время как это читается, и выведите его в конце.

у меня есть очень простое приложение, которое делает что-то близко к тому, что Вы желаете на GitHub. Я звоню, это pfetch (найдите что-либо подобное выборке). Это захватывает различные страницы в расписании, передает результаты потоком в файл, и дополнительно выполняет сценарий после успешного завершения каждого. Это также делает некоторый необычный материал как условное выражение, ДОБИРАЕТСЯ, но все еще могла быть хорошая основа для того, что Вы делаете.

17
задан marc_s 14 October 2009 в 09:36
поделиться

8 ответов

COALESCE Возвращает первое ненулевое выражение среди своих аргументов

Первый аргумент @output + ',' никогда не является нулевым (если вы не инициализируете @ output как null И установите CONCAT_NULL_YIELDS_NULL в ON ), поэтому он всегда возвращается.

2
ответ дан 30 November 2019 в 10:27
поделиться
declare     @output varchar(max)

select      @output = coalesce
                      ( 
                          @output + ', ' + convert(varchar(max),cat_id), 
                          convert(varchar(max),cat_id)
                      )
from        yourTableHere

print       @output
1
ответ дан 30 November 2019 в 10:27
поделиться

Вы инициализировали @output пустой строкой? COALESCE будет работать, только если это NULL строка.

0
ответ дан 30 November 2019 в 10:27
поделиться

Что вы делаете неправильно, так это то, что @output не является нулевым с самого начала, а является пустой строкой. Установите для @output значение null перед циклом (или, если он не используется, поскольку он объявлен, просто не назначайте ему пустую строку).

0
ответ дан 30 November 2019 в 10:27
поделиться

А иногда ...

вы должны ответить на свой вопрос

declare     @output varchar(max)
select      @output = case when (@output is null) then '' else ', ' END + convert(varchar(max),cat_id)
0
ответ дан 30 November 2019 в 10:27
поделиться

Не уверен, что это относится именно к тому, что вы ищете, но я нашел это в то же самое время, когда нашел ваши вопросы. Я использую второе решение с FOR XML PATH, о котором упоминал выше Мэтт Гамильтон. У меня это отлично сработало.

Объединение строк - Карл П. Андерсон, 2009/10/14

http://www.sqlservercentral.com/articles/T-SQL/67973/

0
ответ дан 30 November 2019 в 10:27
поделиться

проверьте значение @output непосредственно перед выполнением этого запроса, я думаю, что оно не равно NULL , а равно '' (пустая строка)

​​РЕДАКТИРОВАТЬ: (после того, как @auth отредактировал вопрос)

теперь я уверен, что это '',

вы должны инициализировать его NULL

, чтобы сделать это независимо от CONCAT_NULL_YIELDS_NULL , используйте старый CASE WHEN :

select @output = NULL
select @output = CASE WHEN @output IS NULL THEN '' ELSE @output+', ' END + value
0
ответ дан 30 November 2019 в 10:27
поделиться

Используете ли вы SQL 2005? С реквизитами для Роба Фарли , который недавно показал мне это:

SELECT stuff((
    SELECT ', ' + cast(cat_id as varchar(max))
    FROM categories
    FOR XML PATH('')
    ), 1, 2, '');

Внутренний запрос (с FOR XML PATH ('') ) выбирает список разделенных запятыми идентификаторов категорий, с ведущей ",". Внешний запрос использует функцию stuff , чтобы удалить начальную запятую и пробел.

У меня нет под рукой экземпляра SQL, чтобы проверить это, поэтому он из памяти. Возможно, вам придется поиграть с параметрами материала и т. Д., Чтобы заставить его работать именно так, как вы хотите.

54
ответ дан 30 November 2019 в 10:27
поделиться