Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2012 से CSV फ़ाइल में डेटा को स्वचालित रूप से कैसे निर्यात करें?

यहाँ कुछ शक्तियाँ हैं जो वह करेंगी जो आप कर रहे हैं; बस इसे विंडोज टास्क शेड्यूलर का उपयोग करके शेड्यूल करें:

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 की आवश्यकता के बिना लक्ष्य को सीधे अपडेट करने की अनुमति देने के लिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डायनामिक लिंक्ड सर्वर क्वेरी

  2. एसक्यूएल सर्वर में तालिका में विशेष वर्णों को प्रतिबंधित करने के लिए नियम बनाएं

  3. एसक्यूएल:स्ट्रिंग में अंतिम अल्पविराम हटा दें

  4. sys.fn_dblog के प्रारंभ और अंत LSN पैरामीटर किस प्रारूप में होने चाहिए?

  5. मैं मौजूदा SQL सर्वर तालिका के लिए एक INSERT स्क्रिप्ट कैसे उत्पन्न कर सकता हूं जिसमें सभी संग्रहीत पंक्तियां शामिल हैं?