2015-03-02 17 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