Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak automatycznie wyeksportować dane z SQL Server 2012 do pliku CSV?

Oto kilka powershell, które zrobią to, czego szukasz; po prostu zaplanuj to za pomocą Harmonogramu zadań systemu 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 

Możliwe jest wywołanie czegoś przy każdej zmianie; tzn. możesz utworzyć wyzwalacz w tabeli, a następnie użyć xp_cmdshell wykonanie skryptu lub podobnego; ale to doprowadzi do problemów z wydajnością (wyzwalacze są często złym rozwiązaniem, jeśli są używane bez pełnego zrozumienia). Również xp_cmdshell otwiera cię na pewne zagrożenia bezpieczeństwa.

Istnieje wiele innych sposobów na osiągnięcie tego; Obecnie mam coś do PowerShell, ponieważ zapewnia mnóstwo elastyczności przy niewielkim nakładzie pracy.

Inną opcją może być przyjrzenie się użyciu serwerów połączonych aby umożliwić twojej źródłowej bazie danych bezpośrednią aktualizację celu bez potrzeby 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. Błąd przepełnienia arytmetycznego podczas konwersji wyrażenia na typ danych datetime

  2. Odpytywanie typów danych XML, które mają atrybuty węzła xmlns

  3. Komunikat 203, poziom 16, stan 2, nie jest prawidłowym identyfikatorem

  4. Nieprawidłowy operator działający ubocznie Wstaw w funkcji

  5. Eksportowanie wyników zapytania do pliku na bieżąco