sql >> Databáze >  >> RDS >> Sqlserver

Jak automaticky exportovat data z SQL Server 2012 do souboru CSV?

Zde je nějaký powershell, který by udělal to, co hledáte; stačí jej naplánovat pomocí Plánovače úloh systému 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 

Je možné mít něco spuštěno při jakékoli změně; tj. můžete vytvořit spouštěč na stole a poté použít xp_cmdshell spustit skript nebo něco podobného; ale to povede k problémům s výkonem (spouštěče jsou často špatnou možností, pokud se používají, aniž by byly plně pochopeny). Také xp_cmdshell vás otevírá některým bezpečnostním rizikům.

Existuje mnoho dalších způsobů, jak toho dosáhnout; momentálně mám něco pro PowerShell, protože vám poskytuje spoustu flexibility s malou režií.

Další možností může být podívat se na použití linked servers aby vaše zdrojová databáze mohla přímo aktualizovat cíl bez potřeby CSV.



  1. Připojte se ke stolu v Symfony 2

  2. MySQL - pomocí GROUP BY a DESC

  3. SQL:vytváření tabulek s primárními klíči a odkazem na cizí klíč (

  4. Použití Inner Join k určení intervalu mezi konkrétními záznamy a souvisejícími událostmi v tabulce