Oto kilka powershell, które zrobią to, czego szukasz; po prostu zaplanuj to za pomocą Harmonogramu zadań systemu Windows:
function Execute-SQLQuery {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[string]$DbInstance
,
[Parameter(Mandatory = $true)]
[string]$DbCatalog
,
[Parameter(Mandatory = $true)]
[string]$Query
,
[Parameter(Mandatory = $false)]
[int]$CommandTimeoutSeconds = 30 #this is the SQL default
)
begin {
write-verbose "Call to 'Execute-SQLQuery': BEGIN"
$connectionString = ("Server={0};Database={1};Integrated Security=True;" -f $DbInstance,$DbCatalog)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
}
process {
write-verbose "`n`n`n-----------------------------------------"
write-verbose "Call to 'Execute-SQLQuery': PROCESS"
write-verbose $query
write-verbose "-----------------------------------------`n`n`n"
$command = $connection.CreateCommand()
$command.CommandTimeout = $CommandTimeoutSeconds
$command.CommandText = $query
$result = $command.ExecuteReader()
$table = new-object “System.Data.DataTable”
$table.Load($result)
Write-Output $table
}
end {
write-verbose "Call to 'Execute-SQLQuery': END"
$connection.Close()
}
}
Execute-SQLQuery -DbInstance 'myServer\InstanceName' -DbCatalog 'myDatabase' -Query @"
select Mxmservsite.siteid as Marker_ID
, mxmservsite.name as Name
, 'SITE' as Group
, '3' as Status
, '' as Notes
, mxmservsite.zipcode as Post_Code
, 'GB' as Country
, '' as Latitude
, '' as Longitude
, '' as Delete
From mxmservsite --this wasn't in your original code
Where dataareaid='ansa'
"@ | Export-CSV '.\MyOutputFile.csv' -NoType
Możliwe jest wywołanie czegoś przy każdej zmianie; tzn. możesz utworzyć wyzwalacz w tabeli, a następnie użyć xp_cmdshell
wykonanie skryptu lub podobnego; ale to doprowadzi do problemów z wydajnością (wyzwalacze są często złym rozwiązaniem, jeśli są używane bez pełnego zrozumienia). Również xp_cmdshell otwiera cię na pewne zagrożenia bezpieczeństwa.
Istnieje wiele innych sposobów na osiągnięcie tego; Obecnie mam coś do PowerShell, ponieważ zapewnia mnóstwo elastyczności przy niewielkim nakładzie pracy.
Inną opcją może być przyjrzenie się użyciu serwerów połączonych
aby umożliwić twojej źródłowej bazie danych bezpośrednią aktualizację celu bez potrzeby CSV.