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 #Requiresyukarı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, #Requiressatı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 .
-QueryParametre gibi çalışır -QsqlCmd.exe parametresi. Dışa aktarmak istediğiniz verileri açıklayan bir SQL sorgusu iletin.
-DatabaseParametre gibi çalışır -dsqlCmd.exe parametresi. Dışa aktarılacak verileri içeren veritabanının adını iletin.
-ServerParametre gibi çalışır -SsqlCmd.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.
-NoTypeInformationParametre 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.
-PathParametre gibi çalışır -osqlCmd.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 .
-EncodingParametresi gibi çalışır -fveya -usqlCmd.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-Sqlcmdboru 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-Sqlcmdkullanarak kendi etkin sürümünüzü kullanabilirsiniz .