यहाँ कुछ शक्तियाँ हैं जो वह करेंगी जो आप कर रहे हैं; बस इसे विंडोज टास्क शेड्यूलर का उपयोग करके शेड्यूल करें:
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
किसी भी बदलाव पर कुछ ट्रिगर होना संभव है; यानी आप टेबल पर एक ट्रिगर बना सकते हैं, फिर xp_cmdshell<का उपयोग करें /कोड>
एक स्क्रिप्ट या समान निष्पादित करने के लिए; लेकिन यह प्रदर्शन समस्याओं का कारण बनने जा रहा है (यदि पूरी तरह से समझे बिना उपयोग किया जाता है तो ट्रिगर अक्सर एक बुरा विकल्प होता है)। साथ ही xp_cmdshell आपको कुछ सुरक्षा जोखिमों के लिए खोलता है।
इसे हासिल करने के और भी कई तरीके हैं; वर्तमान में मेरे पास पावरशेल के लिए एक चीज है क्योंकि यह आपको थोड़े से ओवरहेड के साथ बहुत अधिक लचीलापन देता है।
एक अन्य विकल्प लिंक किए गए सर्वर
का उपयोग करने पर विचार करना हो सकता है
अपने स्रोत डेटाबेस को CSV की आवश्यकता के बिना लक्ष्य को सीधे अपडेट करने की अनुमति देने के लिए।