sql-server - 从 Powershell 调用的存储过程不通过 SMO 对象执行

标签 sql-server powershell stored-procedures

我尝试使用以下代码从 Powershell 终端执行存储过程,但该过程似乎没有执行,并且终端中没有抛出错误。

add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
$so = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -argumentList 'PC-1001'
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($so, "TestDB")
$sproc = $db.StoredProcedures.Item("dproc")
$sproc.Execute

支持的SQL代码是:

create table dummytable (id int identity(1,1), ranwhen datetime default getdate(), dummyval varchar(10));

create procedure dproc as
begin
set nocount on
    insert into dummytable (dummyval)
    select char(datepart(hour, getdate()) * datepart(minute, getdate()) * datepart(second, getdate()) % 256)
end

如果我在 SSMS 中执行该过程(exec dproc),它就会起作用(数据被插入到表中)。

有什么想法为什么它不能在 Powershell 中运行吗? (没有数据被插入到虚拟表中)

更新:

我已将 $db$sproc 变量的声明更改为:

$db = $so.Databases.Item("TestDB")
$sproc = $db.StoredProcedures.Item("dproc")

当检查 $sproc 对象的内容时,我可以看到每个属性都是正确的(T-SQL 代码在那里,URN 值是正确的,并且引用了正确的数据库和架构)。

最佳答案

StoredProcedure 类不提供执行它所代表的存储过程的方法。

你可以尝试一下,我没有采取任何措施来验证这是可能的,使用:

$so.ConnectionContext.ExecuteNonQuery("dproc")

如果做不到这一点,您可能会简单地转而使用 System.Data.SqlClient。

关于sql-server - 从 Powershell 调用的存储过程不通过 SMO 对象执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890502/

相关文章:

sql - 列出表的两个日期列之间的所有日期

C# Entity Framework 在 ExecuteFunction 上抛出错误

sql-server - 如何在 webfarm 中使用 SignalR,使用 Sql server 作为背板

powershell - AzureRm从创建的虚拟机获取IP

powershell - 将用户添加到本地用户组

sql - 动态 sql 与存储过程 - 优缺点?

c# - 何时在 Entity Framework Code First 中使用存储过程和 SQL 查询

sql - 根据选择的另一行更新行,无需声明变量

xml - 如何将 .xml 读入内存并写出相同的结果

mysql - 表变量作为我的sql存储过程中的参数