如何在EXCEL中显示PRINT结果

一个团队成员和我重写了我们在这里发布的问题, 使用从我以前的问题提供的答案的各种来源,以及检查其他解决scheme和查询现在按预期工作。 但是我们需要将这个查询embedded到EXCEL表单中,但是我们需要以某种方式将结果显示在单元格中。 查询的PRINT函数实际上在EXCEL中popup一个窗口(DUH,如预期的那样),但是我们想要做的是如何显示PRINTED结果。 由于查询是在电子表格中自动运行的选项,从SSMS导出到文件,然后从那里检索没有一个选项,因为我们的数据库是非常时髦的我们做的数据库,我们不能作为一个工作..等.. ..任何帮助,将不胜感激。

Declare @StartDate1 as DateTime Declare @StartDate2 as DateTime Declare @EndDate1 as DateTime Declare @EndDate2 as DateTime Declare @TodaysDate1 as DateTime Declare @TodaysDate2 as DateTime Declare @Yesterday as DateTime Declare @TotalRecords1 int = 7 Declare @TotalRecords2 int = 7 set @TodaysDate1 = GETDATE() set @TodaysDate2 = @TodaysDate1 set @Yesterday = DATEADD(day,-1,@TodaysDate1) ------------------------------------------------------------------- -- For AM Shift Data Readings -- ------------------------------------------------------------------- set @StartDate1 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + convert(varchar(2), datepart(mm, @Yesterday)) + '-' + convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + '17:00' as datetime) set @EndDate1 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate1)) + '-' + convert(varchar(2), datepart(mm, getdate())) + '-' + convert(varchar(2), datepart(dd, getdate())) + ' ' + '04:59' as datetime) ------------------------------------------------------------------- -- For PM Shift Data Readings -- ------------------------------------------------------------------- set @StartDate2 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + convert(varchar(2), datepart(mm, @Yesterday)) + '-' + convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + '05:00' as datetime) set @EndDate2 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + convert(varchar(2), datepart(mm, @Yesterday)) + '-' + convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + '16:59' as datetime) --------Material Scan Table-------- SELECT @TotalRecords1=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1), @TotalRecords2=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) WHILE @TotalRecords1 = 0 AND @TotalRecords2 = 0 BEGIN set @TodaysDate1 = DATEADD(day,-1,@TodaysDate1) set @TodaysDate2 = DATEADD(day,-1,@TodaysDate2) set @Yesterday = DATEADD(day,-1,@TodaysDate1) ------------------------------------------------------------------- -- For AM Shift Data Readings -- ------------------------------------------------------------------- set @StartDate1 = cast(convert(varchar(4), datepart(yyyy, @Yesterday)) + '-' + convert(varchar(2), datepart(mm, @Yesterday)) + '-' + convert(varchar(2), datepart(dd, @Yesterday)) + ' ' + '17:00' as datetime) set @EndDate1 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate1)) + '-' + convert(varchar(2), datepart(mm, getdate())) + '-' + convert(varchar(2), datepart(dd, getdate())) + ' ' + '04:59' as datetime) ------------------------------------------------------------------- -- For PM Shift Data Readings -- ------------------------------------------------------------------- set @StartDate2 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate2)) + '-' + convert(varchar(2), datepart(mm, getdate())) + '-' + convert(varchar(2), datepart(dd, getdate())) + ' ' + '05:00' as datetime) set @EndDate2 = cast(convert(varchar(4), datepart(yyyy, @TodaysDate2)) + '-' + convert(varchar(2), datepart(mm, getdate())) + '-' + convert(varchar(2), datepart(dd, getdate())) + ' ' + '16:59' as datetime) SELECT @TotalRecords1=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1), @TotalRecords2=(SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) IF (SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate1 and @EndDate1) > 0 BREAK ELSE IF (SELECT Count(*) FROM [Piston_TOL_PROD_DB].[dbo].[tblLOT_CTRL_Active_Component] WHERE Close_Time_Stamp between @StartDate2 and @EndDate2) > 0 BREAK ELSE CONTINUE END PRINT '1st Shift LOT Trace Scans ending' PRINT @EndDate2 PRINT @TotalRecords2 PRINT ' ' PRINT '2nd Shift LOT Trace Scans ending' PRINT @EndDate1 PRINT @TotalRecords1 

这些是从SSMS中运行查询的实际结果,我们想以某种方式得到EXCEL显示:

 1st Shift LOT Trace Scans ending Jul 6 2016 4:59PM 64 2nd Shift LOT Trace Scans ending Jul 7 2016 4:59AM 73 

您可以尝试将这些保存到表variables中,而不是像下面这样打印它们:

 declare @msgTable table ( msg varchar(100)); insert into @msgTable values ('1st Shift LOT Trace Scans ending'); insert into @msgTable values (@EndDate2); select * from @msgTable; 

然后右键单击结果,然后单击Save results as可以在Excel中打开的csv文件或tab delimited文件。

所以在长周末和团队的帮助下,我们能够在EXCEL中得到我们想要的结果,而且非常简单。 我们所需要做的就是使用CONCAT而不是PRINT。 我想,既然我们最终得出的结论,我会在这里发表。 虽然上面的答案也是一个有点解决scheme,我在这里发布的工作更符合我们的要求,以避免必须导出数据,当我们可以通过查询自动导入。 感谢所有参与者!见下图:

 SELECT CONCAT ( '1st Shift ', @StartDate1, ' Total Scans ', @TotalRecords1, ' and ' + '2nd Shift ', @StartDate2, ' Total Scans ', @TotalRecords2 ) as LotTrace 

结果是:

 LotTrace 1st Shift Jul 11 2016 5:00PM Total Scans 105 2nd Shift Jul 11 2016 5:00AM Total Scans 77