我有一个存储过程,它更新表中的几列,然后选择这些列,以便我可以将它们保存下来以运行报告。目前,我正在通过在"查询选项"中设置列大小为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是一个命令行实用程序,但是可以使用XP命令Shell通过SQL访问它,因此您需要启用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"|" -rn -S' + @Server + ' -T'
--PRINT(@SQL)
exec master.dbo.xp_cmdshell @sql