【发布时间】:2016-07-08 01:20:08
【问题描述】:
由于问题,我和一个团队成员重新编写了我们在此处发布的查询;使用我之前问题提供的答案中的各种来源以及检查其他解决方案,查询现在按预期工作。 但是我们需要嵌入这个查询并在后台运行(我们已经有)到 EXCEL 工作表中,但问题是我们需要以某种方式在单元格中实际显示结果。查询的 PRINT 函数实际上在我们运行时会在 EXCEL 中弹出一个窗口(DUH,如预期的那样),但我们想做的是如何显示 PRINTED 结果.由于查询是在电子表格中自动运行的,因此从 SSMS 导出到文件然后从那里检索的选项不是一个选项,因为我们的 DBA 对我们无法作为作业运行的数据库的处理非常时髦。等等。 .. 任何帮助将不胜感激。
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
【问题讨论】:
标签: sql sql-server excel ssms