簡體   English   中英

如何將 T-SQL 查詢輸出存儲在具有查詢執行當天日期的新表中

[英]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 |
+----------------+----------+--------------+---------------+

現在在安排它之后,我希望我的結果在執行查詢時的每個新日期進入新表。

+----------------+----------+--------------+---------------+
| 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 代理中安排查詢。

請幫我

提前致謝!

要安排查詢,您可以點擊以下鏈接。

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)

如果您使用的是 SQL Server Standard 或 Enterprise,則可以使用 SQL 作業來安排任務。 如果您使用的是快速版,則需要使用 SQL 作業的替代方法。

作為替代方案,您可以使用 PowerShell 腳本來處理與 SQL Server 的連接並執行所需的命令。 更多關於它在這里

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登錄有登錄數據庫、執行、讀取和寫入的權限。 (或者只是給它 sysadmin 角色)。 否則,你需要

這是一個通用的使用腳本,您可以根據需要對其進行修改、擴展。

現在,唯一剩下的就是在 Windows 中使用Task Scheduler來安排 powershell 腳本,以便它可以按照您提供的計划運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM