2015-02-06 55 views
0

對於以下腳本,它會創建一個包含查詢返回的所有行的文件。但是,每一行都跟着換行符。這是一種不加換行符的方式嗎?將DataRows連接成一個大文本文件

$sql = "select .... from ...." 
$r = Invoke-Sqlcmd -ServerInstance xxx $sql 
$name = "test.txt" 
$r | % { $_[0] >> $name } 

更新: 可測試的例子:

$sql = "select 'a' C union all select 'b' union all select 'c' " 
$r = Invoke-Sqlcmd -ServerInstance yoursever $sql 
$name = "c:\temp\test.txt" 
$r | % { $_[0] >> $name } 

預計ABC代替

 
a 
b 
c 
+0

我不知道'$ xml'是什麼。提供一個工作樣本。 – 2015-02-06 21:49:32

+0

只需修復它。它應該是'$ r'。 – ca9163d9 2015-02-06 21:50:04

+0

避免在powershell中使用重定向器。這是古老的方式。如果你使用ex,會發生什麼? '$ r | %{$ _ [0]} |設置內容$名稱? – 2015-02-06 21:50:50

回答

1

與流一起使用,那麼它也會很快!

$sql = "select 'a' C union all select 'b' union all select 'c' " 
$r = Invoke-Sqlcmd -ServerInstance yoursever $sql 
$name = "c:\temp\test.txt" 

$stream = [System.IO.StreamWriter] "$name" 
$r | % { $stream.Write($_[0]) } #Write() as opposed to WriteLine() 
$stream.Close() 
0

數據行是多個對象,所以將它們保存爲foreach會將每個值寫入它們自己的行。收集值並在保存之前加入它們,如:

($r | % { $_[0] }) -join '' >> $name 
+0

這可行。但是,SQL結果可能是100MB大。這是通過管道來實現嗎? – ca9163d9 2015-02-06 22:05:01