如何将 T-SQL 查询输出存储在新的 table 中,并带有查询执行当天的日期
How to store T-SQL query output in new table with date of that day when query executed
我必须创建一个查询,我必须每天 运行 并将输出附加到 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 |
+----------------+----------+--------------+---------------+
现在在安排它之后,我希望我的结果在执行查询时的每个新日期进入新的 table。
+----------------+----------+--------------+---------------+
| 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 |
+----------------+----------+--------------+---------------+
现在我想知道如何修改此查询以使其每天 运行 并将结果存储在带有当天日期的 table 中。
Select
@DateTo as [Execution Date], [Capacity], [Utilization],
([Utilization]/Capacity)*100 as [Utilization %]
From
Occupancy
到目前为止,通过浏览我知道我可以在 SQL 服务器代理中安排查询。
请帮帮我
提前致谢!
要安排查询,您可以按照下面的 link。
现在在添加一个像这样工作的 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)
如果您使用的是 SQL 服务器标准版或企业版,您可以使用 SQL 作业来安排任务。
如果您使用的是快速版,则需要使用 SQL Job 的替代方法。
作为替代方案,您可以使用 PowerShell 脚本来处理与 SQL 服务器的连接并执行您想要的命令。 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
以将脚本映射到目标 it 数据库。
示例:
USE DatabaseName
INSERT INTO SomeTable(ExecutionDate, Capacity, Utilization)
SELECT
CAST(GETDATE() AS DATE)
, [Capacity]
, ([Utilization] / Capacity)*100
From
Occupancy
另外,确保windows登录名具有登录数据库、执行、读取和写入的权限。 (或者只是给它系统管理员角色)。否则,您需要
这是一个通用脚本,您可以修改它,根据需要扩展它。
现在,唯一剩下的就是在 Windows 中使用 Task Scheduler
来安排 powershell 脚本,以便它可以 运行 按照您提供的时间表进行。
我必须创建一个查询,我必须每天 运行 并将输出附加到 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 |
+----------------+----------+--------------+---------------+
现在在安排它之后,我希望我的结果在执行查询时的每个新日期进入新的 table。
+----------------+----------+--------------+---------------+
| 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 |
+----------------+----------+--------------+---------------+
现在我想知道如何修改此查询以使其每天 运行 并将结果存储在带有当天日期的 table 中。
Select
@DateTo as [Execution Date], [Capacity], [Utilization],
([Utilization]/Capacity)*100 as [Utilization %]
From
Occupancy
到目前为止,通过浏览我知道我可以在 SQL 服务器代理中安排查询。
请帮帮我
提前致谢!
要安排查询,您可以按照下面的 link。
现在在添加一个像这样工作的 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)
如果您使用的是 SQL 服务器标准版或企业版,您可以使用 SQL 作业来安排任务。 如果您使用的是快速版,则需要使用 SQL Job 的替代方法。
作为替代方案,您可以使用 PowerShell 脚本来处理与 SQL 服务器的连接并执行您想要的命令。 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
以将脚本映射到目标 it 数据库。
示例:
USE DatabaseName
INSERT INTO SomeTable(ExecutionDate, Capacity, Utilization)
SELECT
CAST(GETDATE() AS DATE)
, [Capacity]
, ([Utilization] / Capacity)*100
From
Occupancy
另外,确保windows登录名具有登录数据库、执行、读取和写入的权限。 (或者只是给它系统管理员角色)。否则,您需要
这是一个通用脚本,您可以修改它,根据需要扩展它。
现在,唯一剩下的就是在 Windows 中使用 Task Scheduler
来安排 powershell 脚本,以便它可以 运行 按照您提供的时间表进行。