2017-09-14 39 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"