Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как автоматично да експортирате данни от SQL Server 2012 в CSV файл?

Ето някакъв powershell, който ще направи това, което търсите; просто го планирайте с помощта на Windows Task Scheduler:

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 ви отваря пред някои рискове за сигурността.

Има много други начини да постигнете това; в момента имам нещо за PowerShell, тъй като ви дава много гъвкавост с малко разходи.

Друг вариант може да бъде да разгледате използването на свързани сървъри за да позволи на вашата изходна база данни директно да актуализира целевата без нужда от 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. Свързване към именуван екземпляр на SQL Server 2008 от класически ASP

  2. C# &SQL Server - най-добрият начин за изтриване на няколко реда наведнъж с помощта на съхранена процедура

  3. SQL Server - Изберете колони, които отговарят на определени условия?

  4. Инсталирайте SQL Server 2016

  5. Как да свържа стойности със същия идентификатор в sql