2016-08-09 2 views
1

Я пытаюсь выполнить Хранимую процедуру на регулярной основе с использованием SQL-заданий и сохранить результаты этого в файле .txt в папке.Сохраненные результаты процедуры в файл, только если нет null

Я использовал команду BCP, которая, как:

DECLARE @command VARCHAR(1000) 
SET @command = 'BCP "Exec [DatabaseName].[dbo].[StoredProcedureName] " queryout "D:\In\ErrorDetails'+ '.txt" -c -T -t -k' 
EXEC xp_cmdshell @command 

Мне нужно, чтобы это выполнить, только если результаты SP не нуль.

+0

Использования EXISTS, чтобы увидеть, если она возвращает NULL перед вызовом прока. https://msdn.microsoft.com/en-us/library/ms188336.aspx – smoore4

ответ

0

Вы можете использовать временную таблицу для хранения данных, сгенерированных SP, если есть какие-либо строки - напишите его в файл

USE tempdb 

IF OBJECT_ID(N'#MyTempTable') IS NOT NULL 
BEGIN 
    DROP TABLE #MyTempTable 
END 

SELECT * INTO #MyTempTable 
FROM OPENROWSET('SQLNCLI', 'Server=HOME\SQLEXPRESS;Trusted_Connection=yes;', 
    'EXEC Test.dbo.StoredProcedureName'); 

IF (SELECT COUNT(*) FROM #MyTempTable) > 0 
BEGIN 
    DECLARE @command VARCHAR(1000) 
    SET @command = 'BCP "USE tempdb SELECT * FROM #MyTempTable " queryout "D:\In\ErrorDetails'+ '.txt" -c -T -t -k' 
    EXEC xp_cmdshell @command 
END 
+0

Спасибо за помощь, я получаю следующую ошибку: Поставщик OLE DB «SQLNCLI11» для связанного сервера »(null)« возвращенное сообщение »Вход время ожидания истекло ». –

+0

Я понятия не имею о поставщике OLE DB. Думаю, мне нужно заменить SQLNCLl11 на мое имя поставщика OLE DB. Но где я могу это получить? –

+0

У меня есть 'Server = HOME \ SQLEXPRESS', что твой? Как вы переписываете эту часть? Обычно эта проблема возникает, когда провайдер не может найти сервер. Если на вашем локальном компьютере вы можете использовать '(local) \ SQLEXPRESS'. Возможно, у вас есть другое имя экземпляра. – gofr1

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