2017-09-14 42 views
1

我有一個Powershell腳本成功地連接到SQL Server數據庫並執行過程。 SQL過程包含一個選擇如下:帶參數的Powershell腳本執行SQL過程已截斷輸出

SELECT @sql AS 'ColDemo1' 

變量@sql是nvarchar(max)。我想@sql的全部內容返回到一個新的SQL文件,但我只得到了第一行和不必要的列標題如下:

ColDemo1 
------------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
First line of data...                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

PowerShell腳本如下:

$server = "SERVER\DEMO" 
$database = "dbDemo" 
$pZero = "PVal0" 
$pOne = "PVal1" 
$pTwo = "PVal2" 
$pThree = "PVal3" 

function Run-SQLUSP { 
    param (
     $pZero, 
     $pOne, 
     $pTwo, 
     $pThree 
    ) 

    $conn = New-Object System.Data.SqlClient.SqlConnection("Server=${server};Database='${database}';Integrated Security=TRUE") 
    $conn.Open() 
    $cmd = $conn.CreateCommand() 
    $cmd.CommandText = "dbo.demoSp '$pZero', '$pOne', '$pTwo', '$pThree'" 
    $adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd) 
    $dataset = New-Object System.Data.DataSet 
    [void]$adapter.Fill($dataset) 
    $dataset.tables[0] 
} 

Run-SQLUSP $pZero $pOne $pTwo $pThree | Out-File "c:\DemoFolder\DemoScriptName.sql" -width 8000 

如何修改我的Powershell腳本以將輸出的所有行返回到新的sql文件?在SSMS中執行過程時,結果集將返回到單個表格單元格中(不是多行)。被要求

+0

嘗試使用'出口csv',而不是'出file' – brendan62269

+0

@ brendan62269感謝,使用'出口csv'避免截斷問題。但是結果仍然包括用引號引起的列標題,數據也用引號引起來。我怎樣才能返回第一個單元格值?注意。以及更改'Out-File',我也刪除了'-width 8000'並添加了'-NoTypeInformation'。 – Fletch

+0

我嘗試在函數內追加'.rows [0] [0]'到'$ dataset.tables [0]',但是這會返回長度引號和一個我認爲是字符串長度的數字,也用引號。我可以使用類似的東西來返回第一個單元格的值嗎? – Fletch

回答

0

兩個變化:

  • 爲了避免截斷輸出:變出-文件來設置內容-Path和刪除-width 8000
  • 只返回第一個單元格:追加.rows [0] [ 0]到函數中的$ dataset.tables [0]。
  • 下面是修改後的代碼完全:

    $server = "SERVER\DEMO" 
    $database = "dbDemo" 
    $pZero = "PVal0" 
    $pOne = "PVal1" 
    $pTwo = "PVal2" 
    $pThree = "PVal3" 
    
    function Run-SQLUSP { 
        param (
         $pZero, 
         $pOne, 
         $pTwo, 
         $pThree 
        ) 
    
        $conn = New-Object System.Data.SqlClient.SqlConnection("Server=${server};Database='${database}';Integrated Security=TRUE") 
        $conn.Open() 
        $cmd = $conn.CreateCommand() 
        $cmd.CommandText = "dbo.demoSp '$pZero', '$pOne', '$pTwo', '$pThree'" 
        $adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd) 
        $dataset = New-Object System.Data.DataSet 
        [void]$adapter.Fill($dataset) 
        $dataset.tables[0].rows[0][0] 
    } 
    
    Run-SQLUSP $pZero $pOne $pTwo $pThree | Set-Content -Path "c:\DemoFolder\DemoScriptName.sql"