sql >> Database >  >> RDS >> Sqlserver

Hoe gegevens automatisch van SQL Server 2012 naar CSV-bestand te exporteren?

Hier is een powershell die zou doen wat je zoekt; plan het gewoon met behulp van de Windows Taakplanner:

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 

Iets getriggerd hebben bij elke verandering is mogelijk; d.w.z. u zou een trigger op de tafel kunnen maken en vervolgens xp_cmdshell om een ​​script of iets dergelijks uit te voeren; maar dat zal leiden tot prestatieproblemen (triggers zijn vaak een slechte optie als ze worden gebruikt zonder dat ze volledig worden begrepen). Ook stelt xp_cmdshell je bloot aan een aantal veiligheidsrisico's.

Er zijn veel andere manieren om dit te bereiken; momenteel heb ik iets met PowerShell omdat het je veel flexibiliteit geeft met weinig overhead.

Een andere optie kan zijn om te kijken naar het gebruik van gekoppelde servers zodat uw brondatabase het doel direct kan bijwerken zonder dat u CSV nodig heeft.



  1. Probleem met JPA-project in Eclipse - fout in klasse geannoteerd @Entity:Tabel xxx kan niet worden opgelost

  2. Eenvoudige manier om een ​​Divide By Zero-fout in SQL te voorkomen

  3. Hoe importeer ik een csv-bestand in MySQL workbench?

  4. Krijgt primaire sleutels invloed na selecteren, bijwerken of invoegen alleen met behulp van SQL?