2015-07-13 3 views
0

У меня есть хранимая процедура, которая обновляет несколько столбцов в таблице, а затем выделяет эти столбцы, поэтому я могу сохранить их для запуска отчета. В настоящее время я делаю экспорт и сохранение вручную, установив размер столбца в «Параметры запроса» на 333, отключив все остальные параметры, поместив результаты в текст и затем сохрани файл с именем и форматом. Я знаю, что должен быть способ автоматизировать это, хотя процесс экспорта и сохранения.Использование BCP в запросе SQL

Я изучил работу с Vb-скриптом, но это простой отчет, который запускается по требованию, а не по расписанию; поэтому работа казалась излишней. Другой вариант, который я нашел, это BCP, который выглядит так, как мне нужно. Я знаю только это как инструмент CMD, хотя и не могу понять, как использовать это в SQL-запросе. В случае необходимости это пример того, что делает моя хранимая процедура. Любая помощь приветствуется и благодарит вас заранее. Я использую SQL 2008 R2 btw.

UPDATE Table#1 SET Column1 = '' WHERE Column1 = 'XX' 

UPDATE Table#1 SET Column2 = '' WHERE Column2 = '000000' 



SELECT Column1 + 
      Column2 + 
      Column3 
FROM Table#1 Where Column4 = 'T' 
+0

Просьба предоставить дополнительную информацию о вашем дизайне стола. Вы просто хотите экспортировать некоторые данные по запросу? Если да, то это плоский стол? – Shnugo

+0

Таблица представляет собой плоскую таблицу, состоящую из данных, которые берутся из нескольких других нормализованных таблиц (это делается с помощью другой хранимой процедуры, которую я написал). Что я делаю с этим proc, то обновляю несколько столбцов, чтобы люди, которые получили этот отчет, могли его понять, а затем экспортировать данные, которые им нужны. Надеюсь, это поможет. –

+0

Вы думали о ODC через Excel (если это подходит вам)? Вы можете определить SQL-Statement там, и результат будет перенесен в Excel-лист. При необходимости вы можете сохранить это как CSV. – Shnugo

ответ

1

BCP утилит командной строки, однако это может быть доступ через SQL с использованием XP командной оболочки, так что вы будете должны xp_cmdshell включены. Ниже приведен параметризованный пример того, как вызвать это внутри SQL.

DECLARE @Server varchar(50) = 'ServerName' /* Source SQL Server */ 
DECLARE @FileName varchar(50) = '' 
DECLARE @SourceProc varchar(50) = '' 
DECLARE @sql varchar(8000) 
DECLARE @RunDate varchar(10) = REPLACE(CONVERT(date, getdate()), '-','') 
DECLARE @FilePath as varchar(255) = '\\UNCPathtoOutputFile\' 
DECLARE @StartDate as Date = (select dateadd(month,datediff(month,0,GETDATE())-2,0))--'1/1/2013' /* Example of required Date as parameter */ 
DECLARE @EndDate as Date = (SELECT dateadd(month,datediff(month,0,GETDATE())-0,-1))--'2/1/2013' /* Example of required Date as parameter */ 
-- BCP Export 
    SET @SourceProc = '[Schema].[StoredProcName]' 
    SET @FileName = 'SomeOutputFile' + @RunDate + '.txt' 
    SET @FilePath = @FilePath + @FileName 
    SET @sql = 'bcp "EXEC [Database].' + @SourceProc + ' ''' + CONVERT(varchar(10),@StartDate, 101) + ''',''' + CONVERT(varchar(10),@EndDate, 101) + '''" QUERYOUT "' + @FilePath + '" -c -t"|" -r\n -S' + @Server + ' -T' 

    --PRINT(@SQL) 
    exec master.dbo.xp_cmdshell @sql 
+0

Удивительно, большое вам спасибо. Я знал, что должен быть способ получить к нему доступ, но не мог найти его нигде. Это было очень полезно. –

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