PowerShell ile sorunu Invoke-Sqlcmd'yi Export-Csv'ye bağlayarak düzgün bir şekilde çözebilirsiniz.
#Requires -Module SqlServer
Invoke-Sqlcmd -Query "SELECT * FROM DimDate;" `
-Database AdventureWorksDW2012 `
-Server localhost |
Export-Csv -NoTypeInformation `
-Path "DimDate.csv" `
-Encoding UTF8
SQL Server 2016, yalnızca SSMS 2016 yükleseniz bile sahip olacağınız cmdlet'i içeren SqlServer modülünü içerir Invoke-Sqlcmd
. Bundan önce, SQL Server 2012 , geçerli dizini modülün olduğu zamana değiştirecek eski SQLPS modülünü içermiştir.SQLSERVER:\
ilk o, değiştirmek gerekir için çok (diğer böcek arasında) kullanılan #Requires
yukarıdaki satırı:
Push-Location $PWD
Import-Module -Name SQLPS
# dummy query to catch initial surprise directory change
Invoke-Sqlcmd -Query "SELECT 1" `
-Database AdventureWorksDW2012 `
-Server localhost |Out-Null
Pop-Location
# actual Invoke-Sqlcmd |Export-Csv pipeline
Örneği SQL Server 2008 ve 2008 R2 için uyarlamak için, #Requires
satırı tamamen kaldırın ve standart PowerShell ana bilgisayarı yerine sqlps.exe yardımcı programını kullanın.
Invoke-Sqlcmd , sqlcmd.exe'nin PowerShell eşdeğeridir. Metin yerine System.Data.DataRow nesnelerini çıktılar .
-Query
Parametre gibi çalışır -Q
sqlCmd.exe parametresi. Dışa aktarmak istediğiniz verileri açıklayan bir SQL sorgusu iletin.
-Database
Parametre gibi çalışır -d
sqlCmd.exe parametresi. Dışa aktarılacak verileri içeren veritabanının adını iletin.
-Server
Parametre gibi çalışır -S
sqlCmd.exe parametresi. Dışa aktarılacak verileri içeren sunucunun adını iletin.
Export-CSV , genel nesneleri CSV'ye serileştiren bir PowerShell cmdletidir. PowerShell ile birlikte gönderilir.
-NoTypeInformation
Parametre CSV formatında bir parçası olmayan ekstra çıkış bastırır. Varsayılan olarak cmdlet, tür bilgisi içeren bir başlık yazar. Nesnenin türünü daha sonra serisini kaldırmak istediğinizde bilmenizi sağlar Import-Csv
, ancak standart CSV'yi bekleyen araçları karıştırır.
-Path
Parametre gibi çalışır -o
sqlCmd.exe parametresi. Eski SQLPS modülünü kullanarak sıkışıp kalırsanız, bu değer için tam bir yol en güvenlidir .
-Encoding
Parametresi gibi çalışır -f
veya -u
sqlCmd.exe parametreleri. Varsayılan olarak Export-Csv yalnızca ASCII karakterleri verir ve diğerlerini soru işaretleriyle değiştirir. Tüm karakterleri korumak ve diğer birçok araçla uyumlu kalmak için UTF8 kullanın.
Bu çözümün sqlcmd.exe veya bcp.exe'ye göre ana avantajı, geçerli CSV çıktısı almak için komutu kesmek zorunda olmamanızdır. Export-Csv cmdlet hepsini sizin için halleder.
Ana dezavantaj, Invoke-Sqlcmd
boru hattı boyunca geçmeden önce tüm sonuç setini okumasıdır. Dışa aktarmak istediğiniz sonuç kümesi için yeterli belleğe sahip olduğunuzdan emin olun.
Milyarlarca satır için düzgün çalışmayabilir. Bu bir sorunsa, diğer araçları deneyebilir veya System.Data.SqlClient.SqlDataReader sınıfını Invoke-Sqlcmd
kullanarak kendi etkin sürümünüzü kullanabilirsiniz .