Hier is een powershell die zou doen wat je zoekt; plan het gewoon met behulp van de Windows Taakplanner:
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
Iets getriggerd hebben bij elke verandering is mogelijk; d.w.z. u zou een trigger op de tafel kunnen maken en vervolgens xp_cmdshell
om een script of iets dergelijks uit te voeren; maar dat zal leiden tot prestatieproblemen (triggers zijn vaak een slechte optie als ze worden gebruikt zonder dat ze volledig worden begrepen). Ook stelt xp_cmdshell je bloot aan een aantal veiligheidsrisico's.
Er zijn veel andere manieren om dit te bereiken; momenteel heb ik iets met PowerShell omdat het je veel flexibiliteit geeft met weinig overhead.
Een andere optie kan zijn om te kijken naar het gebruik van gekoppelde servers
zodat uw brondatabase het doel direct kan bijwerken zonder dat u CSV nodig heeft.