Ecco un po' di powershell che farebbe quello che stai cercando; basta pianificarlo utilizzando l'Utilità di pianificazione di 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
Avere qualcosa attivato su qualsiasi cambiamento è possibile; ad esempio puoi creare un trigger sul tavolo, quindi utilizzare xp_cmdshell
eseguire uno script o simili; ma questo porterà a problemi di prestazioni (i trigger sono spesso una cattiva opzione se usati senza essere completamente compresi). Inoltre xp_cmdshell ti espone ad alcuni rischi per la sicurezza.
Ci sono molti altri modi per raggiungere questo obiettivo; attualmente ho un debole per PowerShell in quanto ti offre molta flessibilità con un sovraccarico minimo.
Un'altra opzione potrebbe essere quella di esaminare l'utilizzo di linked servers
per consentire al database di origine di aggiornare direttamente la destinazione senza bisogno di CSV.