如何在执行查询的当天的日期将T-SQL查询输出存储在新表中

时间:2018-09-28 04:50:58

标签: sql sql-server sql-server-2014

我必须创建一个查询,该查询必须每天运行并将输出附加到Excel中。

但是我想要安排查询每天运行,输出将被存储,但我无法完全做到这一点。

例如,我有此查询

Select 
    @DateTo as [Execution Date], [Capacity],[Utilization],
    ([Utilization] / Capacity)*100 as [Utilization %] 
From 
    Occupancy

结果如下:

+----------------+----------+--------------+---------------+
| Execution Date | Capacity | Utilization  | Utilization % |
+----------------+----------+--------------+---------------+
| 25-08-18       |    10000 |         9000 |            90 |
+----------------+----------+--------------+---------------+

现在,安排好查询后,我希望我的结果在执行查询时每隔一个新日期就进入新表中。

+----------------+----------+--------------+---------------+
| Execution Date | Capacity | Utilization  | Utilization % |
+----------------+----------+--------------+---------------+
| 25-08-18       |    10000 |         9000 | 90            |
| 26-08-18       |    10000 |         8000 | 80            |
| 27-08-18       |    10000 |         5000 | 50            |
| 28-08-18       |    10000 |         9230 | 92.3          |
+----------------+----------+--------------+---------------+

现在,我想知道如何修改此查询以使其每天运行并将结果存储在该日期的表中。

Select 
    @DateTo as [Execution Date], [Capacity], [Utilization],
    ([Utilization]/Capacity)*100 as [Utilization %]
From 
    Occupancy

到目前为止,我通过浏览了解到可以在SQL Server代理中安排查询。

请帮助我

提前谢谢!

2 个答案:

答案 0 :(得分:0)

要安排查询,请点击下面的链接。

https://itknowledgeexchange.techtarget.com/itanswers/how-to-schedule-sql-query-to-run-in-microsoft-sql-server/

现在在其中添加一个Tsql,其工作原理如下

if not exists(select * from sysobjects where name = 'tbl_exection_archive')
Begin

 Select @DateTo as [Execution Date], [Capacity],[Utilization],([Utilization]/Capacity)*100 as [Utilization %] INTO tbl_exection_archive  
    from Occupancy where 1=2

End

insert into tbl_exection_archive 

 Select @DateTo as [Execution Date], [Capacity],[Utilization], 
([Utilization]/Capacity)*100 as [Utilization %] INTO tbl_exection_archive  
    from Occupancy where  @DateTo > (select max([Execution Date]) from 
tbl_exection_archive)

答案 1 :(得分:0)

如果使用的是SQL Server Standard或Enterprise,则可以使用SQL Job计划任务。 如果使用的是Express Edition,则需要使用SQL Job的替代方法。

作为替代方案,您可以使用PowerShell脚本来处理与SQL Server的连接并执行所需的命令。 more about it here

PowerShell脚本

$SqlFile     = "X\SQLJob.sql"               # Replace X with File Path 
$OutputFile  = "X\SQLJob_Log.txt"           # Replace X with File Path 


## SET Connection
Set-Location "SQLSERVER:\SQL\X"             # Replace X with ServerName\InstanceName

## Do SQL Query
Invoke-Sqlcmd -InputFile $SqlFile | Out-File -FilePath $OutputFile

然后,您需要保存一个SQL脚本,以便PowerShell可以执行它,并且一旦完成,它将把结果写入日志文件。

在SQL脚本内,请确保在文件的第一行指定数据库名称USE DatabaseName,以将该脚本映射到目标数据库。 示例:

USE DatabaseName 

INSERT INTO SomeTable(ExecutionDate, Capacity, Utilization)
SELECT  
    CAST(GETDATE() AS DATE)
,   [Capacity]
,   ([Utilization] / Capacity)*100
From 
    Occupancy

还要确保Windows登录名具有登录数据库,执行,读取和写入的权限。 (或只是赋予它sysadmin角色)。否则,您需要

这是一个通用脚本,您可以对其进行修改,并根据需要进行扩展。

现在,剩下的唯一事情就是在Windows中使用Task Scheduler来计划powershell脚本,以便它可以按照您提供的时间表运行。