Как сохранить выходные данные запроса T-SQL в новой таблице с датой того дня, когда запрос был выполнен - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно создать запрос, который я должен выполнять ежедневно, и приложить вывод в 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 голосов
/ 28 сентября 2018

Если вы используете SQL Server Standard или Enterprise, вы можете использовать SQL Job для планирования задачи.Если вы используете экспресс-издание, вам нужно использовать альтернативный метод SQL Job.

в качестве альтернативы вы можете использовать сценарий 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 в первой строке файла, чтобы сопоставить сценарий с целевой базой данных.Пример:

USE DatabaseName 

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

Кроме того, убедитесь, что у входа в Windows есть разрешения на вход в базу данных, выполнение, чтение и запись.(или просто дать ему роль сисадмина).В противном случае вам понадобится

Это скрипт общего назначения, вы можете изменить его, расширить его по мере необходимости.

Теперь осталось только использовать Task Scheduler в Windows, чтобы запланировать сценарий powershell, чтобы он мог работать по предоставленному вами расписанию.

0 голосов
/ 28 сентября 2018

Чтобы запланировать запрос, вы можете перейти по ссылке ниже.

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)
...