我試圖通過使用以下代碼從Powershell終端執行存儲過程,但該過程似乎沒有執行,並且在終端中沒有引發錯誤。從Powershell調用的存儲過程不會通過SMO對象執行
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值正確並引用了正確的DB和模式)。
嘗試添加bracets執行方法,像這樣$ sproc.Execute() –
你是否也與指定模式試過嗎?像$ sproc = $ db.StoredProcedures.Item(「dproc」,「dbo」) - 或其他模式是 –
@KirillPashkov它引發錯誤:「方法調用失敗,因爲[Microsoft.SqlServer.Management.Smo.StoredProcedure]不包含名爲'Execute'的方法。「 –