From 11b251a11a54ae9c81630639c7990a8a2a54bed9 Mon Sep 17 00:00:00 2001 From: Simone Bizzotto Date: Wed, 24 Jan 2024 20:05:20 +0100 Subject: [PATCH] Invoke-DbaQuery, support reuse of parameters (#9221) --- private/functions/Invoke-DbaAsync.ps1 | 2 +- tests/Invoke-DbaQuery.Tests.ps1 | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/private/functions/Invoke-DbaAsync.ps1 b/private/functions/Invoke-DbaAsync.ps1 index 73704facee..8186d95a0c 100644 --- a/private/functions/Invoke-DbaAsync.ps1 +++ b/private/functions/Invoke-DbaAsync.ps1 @@ -304,7 +304,7 @@ function Invoke-DbaAsync { } } } - + $cmd.Parameters.Clear() switch ($As) { 'DataSet' { $ds diff --git a/tests/Invoke-DbaQuery.Tests.ps1 b/tests/Invoke-DbaQuery.Tests.ps1 index 4932a969fd..98acdeb4ee 100644 --- a/tests/Invoke-DbaQuery.Tests.ps1 +++ b/tests/Invoke-DbaQuery.Tests.ps1 @@ -249,6 +249,32 @@ SELECT @@servername as dbname $result.somevalue | Should -Be 'fixedval' } + It "supports using the same parameters multiple times (#9217)" { + $null = Invoke-DbaQuery -SqlInstance $script:instance2 -Database tempdb -Query "CREATE OR ALTER PROCEDURE usp_Insertsomething + @somevalue varchar(10), + @newid varchar(50) OUTPUT + AS + BEGIN + SELECT 'fixedval' as somevalue, @somevalue as 'input param' + SELECT @newid = '12345' + END" + $inparam = New-DbaSqlParameter -ParameterName 'somevalue' -SqlDbType VarChar -Value 'example' + $outparam = New-DbaSqlParameter -Direction Output -Size -1 + $sqlparams = @{ + 'newid' = $outparam + 'somevalue' = $inparam + } + $result1 = Invoke-DbaQuery -SqlInstance $script:instance2 -Database tempdb -Query "EXEC usp_Insertsomething @somevalue, @newid output" -SqlParameters $sqlparams + $outparam.Value | Should -Be '12345' + $result1.'input param' | Should -Be 'example' + $result1.somevalue | Should -Be 'fixedval' + + $result2 = Invoke-DbaQuery -SqlInstance $script:instance2 -Database tempdb -Query "EXEC usp_Insertsomething @somevalue, @newid output" -SqlParameters $sqlparams + $outparam.Value | Should -Be '12345' + $result2.'input param' | Should -Be 'example' + $result2.somevalue | Should -Be 'fixedval' + } + It "supports complex types, such as datatables (#7434)" { $null = Invoke-DbaQuery -SqlInstance $script:instance2 -Database tempdb -Query " IF NOT EXISTS (SELECT * FROM sys.types WHERE name = N'dbatools_tabletype')