如何在 EXCEL 中显示打印结果
How to show PRINT results in EXCEL
由于问题,我和一名团队成员重新编写了我们在此处发布的查询;使用我上一个问题提供的答案中的各种来源以及检查其他解决方案和查询现在按预期工作。 然而 我们需要将此查询和 运行 在后台(我们已经有)嵌入到 EXCEL sheet 中,但问题是我们需要以某种方式实际上在单元格中显示结果。查询的 PRINT 函数实际上在 EXCEL 中弹出一个 window 当我们 运行 (DUH,如预期的那样)但是我们想要的做的是如何显示 PRINTED 结果。由于查询是 运行 自动在 spreadsheet 中,从 SSMS 导出到文件然后从那里检索的选项没有选项,因为我们的 DBA 对我们对数据库所做的事情非常时髦,我们不能运行 as a job..etc.. 再次提供任何帮助将不胜感激。
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
您可以尝试将它们保存到 table 变量中,而不是按如下方式打印它们:
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
到 csv
文件或 tab delimited
文件,您可以在 excel.[=14 中打开这两个文件=]
因此,经过一个长周末和团队的帮助,我们能够在 EXCEL 中获得我们想要的结果,而且非常简单。我们需要做的就是使用 CONCAT 而不是 PRINT。我想,既然我们最终得出了结论,我会 post 在这里。虽然上面的答案在某种程度上也是一种解决方案,但我 post 在这里的解决方案更符合我们的喜好,以避免在我们可以通过查询自动导入时必须导出数据。感谢所有参与进来的人!见下文:
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
由于问题,我和一名团队成员重新编写了我们在此处发布的查询;使用我上一个问题提供的答案中的各种来源以及检查其他解决方案和查询现在按预期工作。 然而 我们需要将此查询和 运行 在后台(我们已经有)嵌入到 EXCEL sheet 中,但问题是我们需要以某种方式实际上在单元格中显示结果。查询的 PRINT 函数实际上在 EXCEL 中弹出一个 window 当我们 运行 (DUH,如预期的那样)但是我们想要的做的是如何显示 PRINTED 结果。由于查询是 运行 自动在 spreadsheet 中,从 SSMS 导出到文件然后从那里检索的选项没有选项,因为我们的 DBA 对我们对数据库所做的事情非常时髦,我们不能运行 as a job..etc.. 再次提供任何帮助将不胜感激。
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
您可以尝试将它们保存到 table 变量中,而不是按如下方式打印它们:
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
到 csv
文件或 tab delimited
文件,您可以在 excel.[=14 中打开这两个文件=]
因此,经过一个长周末和团队的帮助,我们能够在 EXCEL 中获得我们想要的结果,而且非常简单。我们需要做的就是使用 CONCAT 而不是 PRINT。我想,既然我们最终得出了结论,我会 post 在这里。虽然上面的答案在某种程度上也是一种解决方案,但我 post 在这里的解决方案更符合我们的喜好,以避免在我们可以通过查询自动导入时必须导出数据。感谢所有参与进来的人!见下文:
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