Sql-Server-2008
我可以從純 T-SQL 呼叫 SMO 嗎?
我知道如何使用 PowerShell 和 SMO 編寫儲存過程的腳本:
[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null $srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $srv.databases['MyDatabase'].StoredProcedures['MyProc'].TextBody
但由於我想在查詢中使用過程文本,我想知道是否可以在純 T-SQL 中以某種方式呼叫 SMO。
只能在開發環境中執行。
順便說一句:返回具有給定名稱的儲存過程定義的函式將解決我目前的問題,但不能回答我的問題。
編輯:
當我使用這個查詢時,我想找出哪些過程引用了給定的表:
SELECT p.name --, definition FROM sys.sql_modules m join sys.objects p on m.object_id = p.object_id where p.type = 'P' and definition like '%SearchForThis%'
這與我想使用 SMO 獲得的資訊完全相同。
您將為此使用sp_OA% 儲存過程。或自 SQL Server 2005 起的CLR 。
它不能直接通過 T-SQL 完成,因為 T-SQL 是用於數據操作的。因此,您必須使用上述兩種方法之一。除非您想使用 xp_cmdshell 來執行 powershell 腳本。
這也帶來了 T-SQL 的一個限制:如何將對象定義寫入磁碟?我猜你問這個的原因之一。同樣,CLR 或 sp_OA% 會執行此操作。
需要注意的一點是,SMO 中的幾乎每個方法和屬性都映射到 SQL 命令或查詢。因此使用 T-SQL 呼叫實際上是 T-SQL 的 SMO 是循環的。
要獲取儲存過程定義,您可以使用OBJECT_DEFINITION … 來獲取 SMO 中可用的其他屬性,您可以使用 OBJECT_PROPERTY 或查詢系統對象。