在 SQL 查询中使用 BCP

Using BCP in a SQL query

我有一个存储过程,可以更新 table 中的多个列,然后选择这些列,以便我可以将它们保存下来用于我 运行 的报告。目前,我正在通过将 'Query Options' 中的列大小设置为 333,关闭所有其他选项,将结果放入文本,然后使用名称和格式保存文件来手动进行导出和保存。我知道必须有一种方法可以通过导出和保存过程自动执行此操作。

我研究过使用带有 Vb 脚本的作业,但这是一个简单的报告,运行 按需而不是按计划;所以一份工作似乎有点矫枉过正。我找到的另一个选项是 BCP,它看起来正是我需要的。虽然我只知道这是一个 CMD 工具,但我不太清楚如何在 SQL 查询中利用它。如果需要,这里是我的存储过程正在做的一个例子。感谢您提供任何帮助,并在此先感谢您。我正在使用 SQL 2008 R2 顺便说一句。

 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'

BCP 是一个命令行实用程序,但是可以通过 SQL 使用 XP 命令 Shell 访问它,因此您需要启用 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