Powershell 运行 存储过程 returns 行以及输入参数
Powershell run stored procedure returns rows aswell as the input parameters
我有一个存储过程,它将日期作为参数和 returns 行,在 return 来自 powershell 函数的 return 对象数组包含参数和行。
我知道我可以通过引用行并使用它们来解决这个问题,但我想知道为什么它 return 是参数。任何人都可以解释一下吗?
function Invoke-SQL($dataSource, $database, $sqlCommand, $tradeDate) {
$result = New-Object System.Data.DataTable
$connectionString = "Data Source=$dataSource; Integrated Security=SSPI; Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$command.CommandType = [System.Data.CommandType]::StoredProcedure
$parameter = New-Object System.Data.SqlClient.SqlParameter ("@TradeDateParam", $tradeDate)
$command.Parameters.Add($parameter);
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$connection.Open()
$adapter.Fill($result) | Out-Null
$connection.Close()
return $result
}
$resultsDataTable = New-Object system.Data.DataTable
$resultsDataTable = Invoke-SQL "server" "db" "sproc" "dateparam"
ALTER PROCEDURE [dbo].[spCheckTradeActivityBetweenTradeDates]
@TradeDateParam date = null
AS
DECLARE @TradeDate date = @TradeDateParam;
SELECT 'HEllO' AS hello
return 0
Image of returned object array
因此,在阅读 回答后,Powershell 中的函数似乎有时 return 的输出比您 return 的值多。我使用了一个 Out-Null 管道来抑制参数的输出,如下所示,值得注意的是 Out-Null 管道并不是处理这个问题的最有效方法。
虽然管道确实有效,但我仍然不知道为什么它向 SQL 命令添加了一个参数来生成输出。
function Invoke-SQL($dataSource, $database, $sqlCommand, $tradeDate) {
$result = New-Object System.Data.DataSet
$connectionString = "Data Source=$dataSource; Integrated Security=SSPI; Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand, $connection)
$command.CommandType = [System.Data.CommandType]::StoredProcedure
# $parameter = New-Object System.Data.SqlClient.SqlParameter ("@TradeDateParam", $tradeDate)
$command.Parameters.AddWithValue("@TradeDateParam", $tradeDate) | Out-Null # <--Added this pipe to suppress parameter output
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$connection.Open()
$adapter.Fill($result) | Out-Null
$connection.Close()
return $result.Tables
}
我有一个存储过程,它将日期作为参数和 returns 行,在 return 来自 powershell 函数的 return 对象数组包含参数和行。
我知道我可以通过引用行并使用它们来解决这个问题,但我想知道为什么它 return 是参数。任何人都可以解释一下吗?
function Invoke-SQL($dataSource, $database, $sqlCommand, $tradeDate) {
$result = New-Object System.Data.DataTable
$connectionString = "Data Source=$dataSource; Integrated Security=SSPI; Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$command.CommandType = [System.Data.CommandType]::StoredProcedure
$parameter = New-Object System.Data.SqlClient.SqlParameter ("@TradeDateParam", $tradeDate)
$command.Parameters.Add($parameter);
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$connection.Open()
$adapter.Fill($result) | Out-Null
$connection.Close()
return $result
}
$resultsDataTable = New-Object system.Data.DataTable
$resultsDataTable = Invoke-SQL "server" "db" "sproc" "dateparam"
ALTER PROCEDURE [dbo].[spCheckTradeActivityBetweenTradeDates]
@TradeDateParam date = null
AS
DECLARE @TradeDate date = @TradeDateParam;
SELECT 'HEllO' AS hello
return 0
Image of returned object array
因此,在阅读
虽然管道确实有效,但我仍然不知道为什么它向 SQL 命令添加了一个参数来生成输出。
function Invoke-SQL($dataSource, $database, $sqlCommand, $tradeDate) {
$result = New-Object System.Data.DataSet
$connectionString = "Data Source=$dataSource; Integrated Security=SSPI; Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand, $connection)
$command.CommandType = [System.Data.CommandType]::StoredProcedure
# $parameter = New-Object System.Data.SqlClient.SqlParameter ("@TradeDateParam", $tradeDate)
$command.Parameters.AddWithValue("@TradeDateParam", $tradeDate) | Out-Null # <--Added this pipe to suppress parameter output
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$connection.Open()
$adapter.Fill($result) | Out-Null
$connection.Close()
return $result.Tables
}