【发布时间】:2015-05-08 02:14:47
【问题描述】:
我正在尝试从 PowerShell 调用 SQL Server 存储过程,但我总是收到参数错误。
存储过程有8个参数,都是默认值
@simchain nvarchar
@idSimulation int
@idCompany varchar
@modelName nvarchar
@simDate datetime
@mySim int
@statusFloor int
@statusCap int
即使没有任何参数,我也可以在 Management Studio 中调用此过程,因此只需执行 EXEC [dbo].[E_simulations] 即可。
我在 PowerShell 中创建了一个连接和一个命令,但我总是在缺少参数时收到错误,例如
过程或函数“E_simulations”需要参数“@simchain”,但未提供。
这是我的测试代码(只是为了测试是否正确执行)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = $ConnectionString;
$SqlCommand = $SqlConnection.CreateCommand();
$SqlCommand.CommandText = "EXEC [dbo].[E_simulations]";
$SqlConnection.Open();
$returnedValue = $SqlCommand.ExecuteNonQuery();
我错过了什么吗?
【问题讨论】:
-
存储过程是否有所有参数的默认值?如果没有,我也看不出它如何从 SSMS 工作。从 Powershell(或任何应用程序代码)调用 proc 的正确方法是仅在 CommnadText 中指定 proc 名称并指定 CommandType = CommandType.StoredProcedure。您需要添加所需的参数。
-
确保它们对每个参数都有默认值。我尝试添加
$SqlCommand.CommandType = [System.Data.CommandType]::StoredProcedure,但即使我想使用默认值,我现在是否也要添加所有参数? -
您不需要在 proc 标头中添加具有默认值的参数。我刚刚对您的代码(StoredProcedure 命令类型版本)进行了快速测试,它运行没有错误,没有向集合中添加任何参数。仅当我删除参数默认值时才会收到错误消息。检查以确保您连接到与 SSMS 中相同的服务器和数据库。
-
所以你是说我太愚蠢了,我花了两个小时在生产服务器上运行这段代码,而不是在更新过程的测试服务器上运行这段代码?你以为我这么傻吗??真的???是你说的吗???嗯......你是对的......谢谢你;)
-
去过那里,做到了:-)
标签: sql-server powershell stored-procedures