Inilah beberapa powershell yang akan melakukan apa yang Anda cari; cukup jadwalkan menggunakan Penjadwal Tugas 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
Untuk memicu sesuatu pada perubahan apa pun adalah mungkin; yaitu Anda dapat membuat pemicu di atas meja, lalu gunakan xp_cmdshell
untuk menjalankan skrip atau serupa; tapi itu akan menyebabkan masalah kinerja (pemicu sering kali merupakan pilihan yang buruk jika digunakan tanpa sepenuhnya dipahami). Juga xp_cmdshell membuka Anda untuk beberapa risiko keamanan.
Ada banyak cara lain untuk mencapai ini; saat ini saya memiliki sesuatu untuk PowerShell karena memberi Anda banyak fleksibilitas dengan sedikit overhead.
Opsi lain mungkin untuk melihat menggunakan linked servers
untuk mengizinkan basis data sumber Anda memperbarui target secara langsung tanpa perlu CSV.