手工部署Sqlserver CLR程序集

原文 手工部署Sqlserver CLR程序集

以前一直用VS部署Sqlserver CLR程序集简单省事,现在服务器部署在内网了,必须手动更新部署Sqlserver CLR程序集。
    开始以为ALTER ASSEMBLY [程序集名称] FROM 'G:\AA\XX.dll'这样就OK,没想到出错然后查资料越弄越复杂,看来手工部署远没想象中这么简单,于是好好研究了一番最后终于成功,具体步骤是:
    1.如果以前部署过当前程序集,则必须先删除引用当前程序集的所有模块(各类函数和存储过程等),然后删除当前程序集。
    2.重新部署当前程序集,然后再创建相关模块(各类函数和存储过程等)。
    以下是一个sql模板,有需要的可以套一下:

-- ================================= 删除先 ================================= --

-- MyCLRSqlserver 为程序集部署名称

 

IF  EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'MyCLRSqlserver' and is_user_defined = 1)

BEGIN

 -- 删除集合函数。

 IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[StrJoin]') AND type = N'AF')

  DROP AGGREGATE dbo.StrJoin;

 -- 删除标量函数。

 IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[___fun_CLR_ChangeSalarieScope]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))

  DROP FUNCTION dbo.___fun_CLR_ChangeSalarieScope;

        -- 删除其它...

  

 -- 卸载程序集。

 DROP ASSEMBLY [MyCLRSqlserver];

END;

 

-- ================================= 重新创建 ================================= --

 

-- 注册程序集(如果是在服务器上部署,需要将此dll复制到服务器,然后修改文件地址)。

CREATE ASSEMBLY [MyCLRSqlserver] FROM 'G:\AA\XX.dll';

 

---------------------- [dbo].[StrJoin] ----------------------

CREATE AGGREGATE [dbo].[StrJoin]

(@Value [nvarchar](4000))

RETURNS[nvarchar](4000)

EXTERNAL NAME [MyCLRSqlserver].[MyCLRSqlserver.StrJoin]

GO

 

EXEC sys.sp_addextendedproperty @name=N'AutoDeployed', @value=N'yes' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'AGGREGATE',@level1name=N'StrJoin'

GO

 

EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFile', @value=N'StrJoin.cs' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'AGGREGATE',@level1name=N'StrJoin'

GO

 

EXEC sys.sp_addextendedproperty @name=N'SqlAssemblyFileLine', @value=14 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'AGGREGATE',@level1name=N'StrJoin'

GO

-- 其它函数创建过程...

 

-- ================================= END ================================= --

    以上是手工创建过程比较麻烦,当然如果模块不多的话这样也没问题,如果很多的话可以查当前数据库的系统视图assembly_modules获取所有CLR模块,然后写代码自动生成模块DROP和CREATE过程。
    以上是本人手工部署Sqlserver CLR程序集过程,在此做个记录方便以后随时翻阅,同时也给没有手工部署经验的同学提供参考,如果哪位有更方便智能的方法敬请告之,谢谢!

时间: 2024-11-06 03:39:46

手工部署Sqlserver CLR程序集的相关文章

云服务器 ECS 建站教程:手工部署Java Web项目

手工部署Java Web项目 Tomcat 一个开源的且免费的 Java Web 服务器,常用来作为 web 开发的工具.它可以托管由 servlet,JSP 页面(动态内容),HTML 页面,javascript,样式表,图像(静态内容)组成的 Java Web 应用程序. 此外,将来随着业务的扩展,您可以利用阿里云强大的产品平台,平滑地横向和纵向扩展服务容量,例如: 扩展单个 ECS 实例的 CPU 和内存规格,增强服务器的处理能力. 增加多台 ECS 实例,并利用负载均衡,在多个实例中进行

如何解决在Azure上部署Sqlserver网络访问不了_MsSql

最近在部署Azure虚拟机的时候,一直访问不了网络数据库,一搜资料才知道,Azure默认是不打开入网规则的,需要手动设置. 在 Windows 防火墙中为数据库引擎的默认实例打开 TCP 端口 1.在"开始"菜单中,单击"运行",键入 WF.msc,然后单击"确定". 2.在"高级安全 Windows 防火墙"的左侧窗格中,右键单击"入站规则",然后单击操作窗格中的"新建规则". 3.在

如何解决在Azure上部署Sqlserver网络访问不了

最近在部署Azure虚拟机的时候,一直访问不了网络数据库,一搜资料才知道,Azure默认是不打开入网规则的,需要手动设置. 在 Windows 防火墙中为数据库引擎的默认实例打开 TCP 端口 1.在"开始"菜单中,单击"运行",键入 WF.msc,然后单击"确定". 2.在"高级安全 Windows 防火墙"的左侧窗格中,右键单击"入站规则",然后单击操作窗格中的"新建规则". 3.在

Sqlserver CLR项目 为什么总是部署不上??

问题描述 创建项目,然后选择连接测试连接成功,然后添加自定义函数生成自后.在查询分析器中执行execsp_configure'clrenabled',1;--开始数据的验证alterdatabasetestdbsetTRUSTWORTHYon;RECONFIGURE执行下列语句时提示错误createassemblySqlDependencyfrom'D:binUserDefinedFunctions.dll'withpermission_set=unsafe针对'UserDefinedFunct

初探SQL Server CLR 集成

sqlserver 2005中,加入了很多新特性.对于开发人员来讲,最值得一提的是对XML的支持和CLR集成.当然,还有一些关于"高可用"(数据库集群/数据库镜像/日志传送等)的新特性,比较适合DBA,感兴趣的朋友可以了解一下. 相信很多人和我一样,一直很希望在sqlserver中非常灵活地编程,实现各种功能(能像在VS中使用C#编程一样的爽).但是未能如愿,暂不说开发环境的问题(代码补全,配色等).最主要的是,T-SQL这东西确实不适合做复杂的运算(对我这种菜鸟来讲确实有难度.对那些

部署ASP.NET的三大技术(下) (3)

asp.net 除了"启动画面"对话框之外,用户界面编辑器还提供了许多其他预定义的对话框,例如"许可协议"."自述文件"."注册用户"."客户信息"等,这些对话框都可以利用图五的"添加对话框"窗口直接加入. 八.部署IIS配置信息 在准备部署ASP.NET应用程序的时候,一个必须考虑的重要问题是如何在部署应用的同时部署IIS的配置信息.如果用直接复制的方法部署Web应用,例如用XCOPY

CLR SQL SERVER:让正则表达式也加入你的Transaction-SQL

试过Transaction-Sql编程的哥们应该都觉的这东西太恶心了,除了IDE,最恶心得还数编程中涉及的字符 串拼接问题.想象一下:在一个巨复杂的业务逻辑中,里面充满了while,if,case.你必须处理好所有的情 况并按某一规则来拼接字符串.这些字符串可能是Sql,也可能是结果,但不管是什么都是我们的噩梦. 正则表达式是啥相信就不要我介绍了,处理文本的利器呀.虽然Sql Server也支持正则表达式,但使 用比较麻烦,还是自己制作一个正则表达函数来的方便.这节主要涉及了CLR Sql Se

CLR笔记系文章目录索引

CLR笔记:18.可空值类型 CLR笔记:17.自定义属性 CLR笔记:16.泛型 CLR笔记:15.委托 CLR笔记:14.接口 CLR笔记:13.数组 CLR笔记:12.枚举类型和位标志 CLR笔记:11.字符串 CLR笔记:10.事件 CLR笔记:9.Property CLR笔记:8.方法 CLR笔记:7.常量和字段 CLR笔记:6.类型和成员基础 CLR笔记:5.基元,引用和值类型 CLR笔记:4.类型基础 CLR笔记:3.共享程序集合强命名程序集 CLR笔记:2.生成,打包,部署,管理

使用CLR会造成内存方面的问题吗

我老是担心使用CLR会造成内存方面的问题,比如内存不能回收.其实想一想也许我过滤了,毕竟.NET Framework能够自己回收托管内存.既然在应用服务器上能使用,数据库上似乎也可以使用. 希望听一听大家的经验和见解~~ Peak Wong: 一般不用, 主要是DBA管理这种东西的时候会很麻烦, 因为自己写的CLR很难保证没有BUG, 一旦出BUG, 如果只是影响调用那一部分还好, 如果导致整个服务挂掉, 则很危险了(而且往往导致服务器挂掉还不一定查得出来是否CLR的问题) 另外, 部署和迁移也