2015-03-02 18 views
0

我正在使用以下POWERSHELL腳本將SQL表的內容導出到.csv。它運行良好,不幸的是它失敗了,因爲有問題的桌面現在已經添加了一些NULLS。使用POWERSHELL從SQL導出,其中輸出包含NULLS

有沒有辦法修改這個以允許它通過NULLS,還是最好修改底層表。

$server = "sqlmtest" 
$database = "mi_lookups" 
$query = "SELECT * FROM [dbo].[SQLMtest-BIS-BUS-BPS_system_agent_lookup]" 

$extractFile = @" 
G:\system_Lookup_Tables\system_agent_lookup.csv 
"@ 


$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};" 
$connectionString = [string]::Format($connectionTemplate, $server, $database) 
$connection = New-Object System.Data.SqlClient.SqlConnection 
$connection.ConnectionString = $connectionString 

$command = New-Object System.Data.SqlClient.SqlCommand 
$command.CommandText = $query 
$command.Connection = $connection 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $command 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$connection.Close() 


$DataSet.Tables[0] | Export-Csv $extractFile 

謝謝。

+0

根本不需要修改表本身。修改您的'select'語句,使NULL不會返回,或者您的'Export-Csv'管道使NULL不會導致問題 – paul 2015-03-02 11:07:04

+0

只是一種解決方法,但是不能通過給列名稱並使用ISNULL來擴展查詢根據數據類型,[column1],'')還是ISNULL([column1],0)? – Rubik 2015-03-02 11:08:49

+0

不幸的是,該表包含NULLS存在的行,但我仍然需要導出它們。 @paul - 關於如何編輯Export-csv來處理NULLS的任何建議? – chris1982 2015-03-02 11:45:06

回答

0

謝謝所有人(@Paul的確在評論中提出了這個建議)。爲了解決這個問題,我使用ISNULL()將項目包裝在原始選擇中。

$query = "SELECT [l].client_key, ISNULL([l].client_name) FROM [dbo].[test] AS [l]" 

不是一個特別優雅的解決方案,但它解決了這個問題。

0

只是關於您的PowerShell語法的評論:不要讓它比必要的更難。

,這裏字符串是沒有意義的,只是做一個普通字符串:

$extractFile = "G:\system_Lookup_Tables\system_agent_lookup.csv" 

$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};" 
$connectionString = [string]::Format($connectionTemplate, $server, $database) 
$connection = New-Object System.Data.SqlClient.SqlConnection 
$connection.ConnectionString = $connectionString 

可以寫成這樣:

$connection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$server;Integrated Security=SSPI;Initial Catalog=$database;") 

$command = New-Object System.Data.SqlClient.SqlCommand 
$command.CommandText = $query 
$command.Connection = $connection 

像這樣:

$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection) 

與SqlDataAdapter的同樣的事情。

+0

謝謝。我認爲這不是特別好 - 我會重新編寫並嘗試實施您的建議。 – chris1982 2015-03-02 11:41:31