Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để tự động xuất dữ liệu từ SQL Server 2012 sang tệp CSV?

Đây là một số quyền hạn sẽ làm những gì bạn đang theo đuổi; chỉ cần lên lịch bằng Trình lập lịch tác vụ của Windows:

Hàm
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 

Có thể có một cái gì đó được kích hoạt trên bất kỳ thay đổi nào; tức là bạn có thể tạo trình kích hoạt trên bảng, sau đó sử dụng xp_cmdshell để thực thi một tập lệnh hoặc tương tự; nhưng điều đó sẽ dẫn đến các vấn đề về hiệu suất (các trình kích hoạt thường là một lựa chọn tồi nếu được sử dụng mà không được hiểu đầy đủ). Ngoài ra xp_cmdshell cũng mở ra cho bạn một số rủi ro bảo mật.

Có nhiều cách khác để đạt được điều này; hiện tại, tôi có một thứ cho PowerShell vì nó cung cấp cho bạn vô số sự linh hoạt với chi phí thấp.

Một tùy chọn khác có thể là sử dụng linked servers để cho phép cơ sở dữ liệu nguồn của bạn cập nhật trực tiếp mục tiêu mà không cần 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:Xoay vòng với tên cột tùy chỉnh

  2. SQL Server - nối các hàng thành danh sách được phân tách bằng dấu phẩy

  3. Làm cách nào để bạn nhập một tệp MS SQL .sql lớn?

  4. Việc cắt bớt SQL Server và giới hạn 8192

  5. Hợp nhất nhiều tệp SQL thành một tệp SQL duy nhất