我想使用SMO来做一些在T-SQL中不容易完成的事情。然而,我找到的所有示例都是针对C#或Powershell的。有没有一种简单的方法可以通过T-SQL调用SMO,就像使用DMO和sp_OACreate一样?一种方法是通过xp_cmdshell通过PowerShell调用SMO -但这将是丑陋的。有什么建议吗?
一个明显的例子是“使用SMO编写一个表的脚本”,通过SQL调用。
谢谢。
发布于 2015-03-14 22:30:48
不幸的是,SMO不能通过SQLCLR直接调用。它不仅不在Supported .NET Framework Libraries列表中,而且是明确禁止的-- Microsoft.SqlServer.Smo.dll。
如果尝试通过CREATE ASSEMBLY手动导入动态链接库,则会出现以下错误:
CREATE ASSEMBLY [SMO]
AUTHORIZATION [dbo]
FROM
N'C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'
WITH PERMISSION_SET = UNSAFE;返回:
消息6596,第16级,状态1,第1行
创建程序集失败,因为程序集'Microsoft.SqlServer.Smo‘是系统程序集。考虑创建一个用户程序集来包装所需的功能。
好的,那么尝试“创建一个用户程序集来包装所需的功能”。
如果您的程序集标记为PERMISSION_SET = SAFE,您将获得:
消息6522,第16级,状态2,第1行
执行用户定义的例程或聚合“SmoTest”时出现.NET框架错误:
System.Security.SecurityException:该程序集不允许部分受信任的调用方。
如果您的程序集标记为PERMISSION_SET = UNSAFE,您将获得:
消息6522,第16级,状态2,第1行
执行用户定义的例程或聚合“SmoTest”时出现.NET框架错误:
:此功能在System.Exception中被禁用。建议您从客户端应用程序执行。
System.Exception:
在Microsoft.SqlServer.Management.Common.ConnectionManager..ctor()
在Microsoft.SqlServer.Management.Smo.Server..ctor()
更新:
而且,我刚刚在MSDN论坛上找到了2007年1月的相关帖子:
'microsoft.sqlserver.batchparser' is malformed or not a pure .NET assembly.
https://stackoverflow.com/questions/7675060
复制相似问题