Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara mengekspor data secara otomatis dari SQL Server 2012 ke file CSV?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panggil prosedur tersimpan dari php codeigniter

  2. Bagaimana cara membatasi pengguna untuk mengakses objek hanya dari satu skema di SQL Server 2008?

  3. SQL Server:String Kosong VS Null

  4. Pivot beberapa kolom berdasarkan satu kolom di SQL Server

  5. Apa itu Protokol TDS Versi 8.0 dan mengapa saya harus menggunakannya?