Sql 将参数从powershell传递到存储过程

Sql 将参数从powershell传递到存储过程,sql,powershell,Sql,Powershell,我试图使用powershell将2个参数传递给存储过程 我的代码如下,当我在powershell中运行它时,没有错误。但是,似乎没有传递参数,因为我无法得到正确的结果。下面有什么问题吗 $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=localhost;Database=AMSDataWarehouse Test;Integra

我试图使用powershell将2个参数传递给存储过程

我的代码如下,当我在powershell中运行它时,没有错误。但是,似乎没有传递参数,因为我无法得到正确的结果。下面有什么问题吗

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=localhost;Database=AMSDataWarehouse    Test;Integrated Security=SSPI"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$sqlcmd.CommandText = "YQBReport1"
$param1=$sqlcmd.Parameters.Add("@from" , [System.Data.SqlDbType]::DateTime)
$param1.Value = "2013-03-13"
$param2=$sqlcmd.Parameters.Add("@to" , [System.Data.SqlDbType]::DateTime)
$param2.Value = "2013-03-14"
$SqlConnection.Open()
$sqlcmd.ExecuteNonQuery()
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$SQLResult =$DataSet.Tables[0]
$commands = $SQLResult | foreach-object -process { $_.output }> output.ps1
.\output.ps1
添加YQBReport1的代码

create PROCEDURE YQBreport1 
AS 
declare @from datetime, @to datetime, @TypeBigAC char(3)
select @TypeBigAC='333'

Select 
'$application = New-Object -ComObject Visio.Application;
$documents = $application.Documents;
$document = $documents.Add("AMSGantt.vst");
$pages = $application.ActiveDocument.Pages;
$page = $pages.Item(1);
$shape500 = $page.DrawLine(2,7.9,11,7.9);
$shape500.TextStyle = "Title";
$shape500.LineStyle = "Title";'
as output
union all

select
'$shape500.text = '+'"'+'Assignation de Barrières-' +      DATENAME(WEEKDAY,@from)+','+DATENAME(MONTH,@from)+'   '+DATENAME(DAY,@from)+','+DATENAME(YEAR,@from)+'"'+';'
as output
Union all

SELECT 
'$shape'+cast(ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+' =     $page.DrawRectangle'+'('+CAST(X1 as varchar)+','+CAST(Y1 as varchar)+','+CAST(X2 as   varchar)+','+CAST(Y2 as varchar)+')'+';'
+'$shape'+ cast(ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.'+'LineStyle =    Gantt"'+';'
+'$shape'+ cast(ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.'+'TextStyle =      "Gantt"'+case when left(arrival, 2)='AC' THEN 'Red' ELSE '' END+ CASE WHEN LEFT(Departure,      2)='AC' THEN 'Red' ELSE '' END+';'
    +'$shape'+ cast(ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.FillStyle =        "Gantt'+CASE WHEN CHARINDEX(@TypeBigAC, [ACType Iata])<>0 THEN ' Big AC' ELSE ''        END+'"'+';'
+'$shape'+ cast(ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.Text = "'+case when    LEN(arrival)<>0 THEN Arrival ELSE '###' END +' / '+ case when len([ACType Iata])<>0 then    [ACType Iata] else ' ' end +' / '+ CASE WHEN LEN(Departure)<>0 THEN Departure ELSE '###'    END +'"'+';'
+'$shape'+ cast(100+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+' =   $page.DrawLine('+cast(X1 -0.5 as varchar)+','+cast(Y1 -0.03 as varchar)+','+cast(X1 +0.5 as    varchar)+','+cast(Y1 -0.03 as varchar)+ ')'+';'
+'$shape'+ cast(100+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.Text =    "'+CONVERT(char(5), [Allocation Start Datetime], 108)+'"'+';'
+'$shape'+ cast(100+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.TextStyle =   "Times"'+';'
+'$shape'+ cast(100+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.LineStyle =     "Times"'+';'
+'$shape'+ cast(200+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+' =    $page.DrawLine('+cast(X2 -0.1 as varchar)+','+cast(Y1 -0.03 as varchar)+','+cast(X2 +0.1 as    varchar)+','+cast(Y1 -0.03 as varchar)+ ')'+';'
+'$shape'+ cast(200+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.Text =    "'+CONVERT(char(5), [Allocation End Datetime], 108)+'"'+';'
+'$shape'+ cast(200+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.TextStyle =    "Times"'+';'
+'$shape'+ cast(200+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+'.LineStyle =    "Times"'+';'


as output
FROM GanttReport(@from,@to,@TypeBigAC)
union all
select '$shape'+ cast(300+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) as varchar)+' =     $page.DrawLine('+cast(X1 as varchar)+','+cast(Y2 as varchar)+','+cast(X2 as     varchar)+','+cast(Y1 as varchar)+ ')'
from GanttReportTowingLines(@from,@to,@TypeBigAC)
试试这个

$commands = $SQLResult | foreach-object -process { $_.output }>> output.ps1
试试这个

$commands = $SQLResult | foreach-object -process { $_.output }>> output.ps1

必须将命令类型设置为存储过程

$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
更新

在代码中,@from和@to不是参数。使用上面的代码创建带有参数的SP

CREATE PROCEDURE YQBreport1 @from datetime, @to datetime
AS 
declare  @TypeBigAC char(3)
''''

必须将命令类型设置为存储过程

$SqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure
更新

在代码中,@from和@to不是参数。使用上面的代码创建带有参数的SP

CREATE PROCEDURE YQBreport1 @from datetime, @to datetime
AS 
declare  @TypeBigAC char(3)
''''

我用这样的方式:

sqlcmd -E -d Logging -S vansant.Server.local -Q "exec TestPass.ConsolidateMilestoneManualTestRuns @Milestone='$branch'"

其中@Milestone是一个参数。

我使用如下内容:

sqlcmd -E -d Logging -S vansant.Server.local -Q "exec TestPass.ConsolidateMilestoneManualTestRuns @Milestone='$branch'"

其中@Milestone是一个参数。

我添加了它,得到的错误是,过程YQBReport1没有参数,并且提供了参数……我声明了from和to的类型,但没有声明值,出于某种原因,系统不喜欢我用太多的“@”进行回复,因此,我在参数前面的代码中删除它们只是为了发布:创建过程YQBreport1作为declare from datetime,to datetime,TypeBigAC char3 select TypeBigAC='333',听起来问题在于您没有使用from和to参数。@HamletHakobyan,请看我的更新后的文章,与代码,它被创建为parameters@Apriljuly你看不出你的代码和我的代码有什么区别吗?仔细看。我添加了它,得到的错误是,过程YQBReport1没有参数,并且提供了参数……我声明了from和to的类型,但没有声明值,出于某种原因,系统不喜欢我用太多的“@”来回复,因此,我在参数前面的代码中删除它们只是为了发布:创建过程YQBreport1作为declare from datetime,to datetime,TypeBigAC char3 select TypeBigAC='333',听起来问题在于您没有使用from和to参数。@HamletHakobyan,请看我的更新后的文章,与代码,它被创建为parameters@Apriljuly你看不出你的代码和我的代码有什么区别吗?仔细看。