sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 から CSV ファイルにデータを自動的にエクスポートする方法は?

    これは、あなたが求めていることを行うパワーシェルです。 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 
    

    変更時に何かをトリガーすることは可能です。つまり、テーブルにトリガーを作成し、xp_cmdshell<を使用できます。 /コード> スクリプトなどを実行する。しかし、それはパフォーマンスの問題につながります (完全に理解されていない状態でトリガーを使用すると、多くの場合、不適切なオプションになります)。また、xp_cmdshell を使用すると、いくつかのセキュリティ リスクが生じます。

    これを実現する方法は他にもたくさんあります。現在、PowerShell を使用しています。オーバーヘッドがほとんどなく、柔軟性が高いからです。

    別のオプションとして、リンク サーバーの使用を検討することもできます。 CSV を必要とせずに、ソース データベースがターゲットを直接更新できるようにします。



    1. RubyonRailsをリモートのmysqlデータベースに接続できません

    2. ストアドプロシージャを使用して、SQLServer2005の文字列にサブ文字列が含まれているかどうかを確認します

    3. MySQLGROUPBYおよび空の行を埋める

    4. Mysqlでの行レベルのロック