首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过T-SQL调用SMO?

通过T-SQL调用SMO?
EN

Stack Overflow用户
提问于 2011-10-06 21:39:22
回答 1查看 893关注 0票数 2

我想使用SMO来做一些在T-SQL中不容易完成的事情。然而,我找到的所有示例都是针对C#或Powershell的。有没有一种简单的方法可以通过T-SQL调用SMO,就像使用DMO和sp_OACreate一样?一种方法是通过xp_cmdshell通过PowerShell调用SMO -但这将是丑陋的。有什么建议吗?

一个明显的例子是“使用SMO编写一个表的脚本”,通过SQL调用。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-14 22:30:48

不幸的是,SMO不能通过SQLCLR直接调用。它不仅不在Supported .NET Framework Libraries列表中,而且是明确禁止的-- Microsoft.SqlServer.Smo.dll

如果尝试通过CREATE ASSEMBLY手动导入动态链接库,则会出现以下错误:

代码语言:javascript
复制
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.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7675060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档