Вы не должны использовать потоки вообще для этого. Это - тривиальная задача для , скрутил , и это, вероятно, возьмет Вас значительно далее так или иначе.
Использование только один поток, и имеют завершение триггера запроса событие, чтобы сделать запись.
скрученный будет заботиться о планировании, обратных вызовах, и т.д.... для Вас. Это вручит Вам весь результат как строку, или можно выполнить его через потоковый процессор (я имею программный интерфейс Твиттера и friendfeed API, что оба исчерпывают события вызывающим сторонам, поскольку результаты все еще загружаются).
В зависимости от того, что Вы делаете со своими данными, Вы могли просто вывести полный результат в sqlite, поскольку это завершено, приготовьте его и выведите его или приготовьте его, в то время как это читается, и выведите его в конце.
у меня есть очень простое приложение, которое делает что-то близко к тому, что Вы желаете на GitHub. Я звоню, это pfetch (найдите что-либо подобное выборке). Это захватывает различные страницы в расписании, передает результаты потоком в файл, и дополнительно выполняет сценарий после успешного завершения каждого. Это также делает некоторый необычный материал как условное выражение, ДОБИРАЕТСЯ, но все еще могла быть хорошая основа для того, что Вы делаете.
COALESCE Возвращает первое ненулевое выражение среди своих аргументов
Первый аргумент @output + ','
никогда не является нулевым (если вы не инициализируете @ output
как null И установите CONCAT_NULL_YIELDS_NULL
в ON
), поэтому он всегда возвращается.
declare @output varchar(max)
select @output = coalesce
(
@output + ', ' + convert(varchar(max),cat_id),
convert(varchar(max),cat_id)
)
from yourTableHere
print @output
Вы инициализировали @output пустой строкой? COALESCE будет работать, только если это NULL строка.
Что вы делаете неправильно, так это то, что @output не является нулевым с самого начала, а является пустой строкой. Установите для @output значение null перед циклом (или, если он не используется, поскольку он объявлен, просто не назначайте ему пустую строку).
А иногда ...
вы должны ответить на свой вопрос
declare @output varchar(max)
select @output = case when (@output is null) then '' else ', ' END + convert(varchar(max),cat_id)
Не уверен, что это относится именно к тому, что вы ищете, но я нашел это в то же самое время, когда нашел ваши вопросы. Я использую второе решение с FOR XML PATH, о котором упоминал выше Мэтт Гамильтон. У меня это отлично сработало.
Объединение строк - Карл П. Андерсон, 2009/10/14
проверьте значение @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
Используете ли вы SQL 2005? С реквизитами для Роба Фарли , который недавно показал мне это:
SELECT stuff((
SELECT ', ' + cast(cat_id as varchar(max))
FROM categories
FOR XML PATH('')
), 1, 2, '');
Внутренний запрос (с FOR XML PATH ('')
) выбирает список разделенных запятыми идентификаторов категорий, с ведущей ",". Внешний запрос использует функцию stuff , чтобы удалить начальную запятую и пробел.
У меня нет под рукой экземпляра SQL, чтобы проверить это, поэтому он из памяти. Возможно, вам придется поиграть с параметрами материала и т. Д., Чтобы заставить его работать именно так, как вы хотите.