批量生成clr脚本
use [dbname]
go
--1.产生crl程序集的sql
--定义表变量,临时存储中间结果集
declare @tb table
(
name nvarchar(100),
permission_set int,
content varbinary(max),
rownum int,
create_clr_sql nvarchar(max)
);
insert into @tb
select a.name,
a.permission_set,
af.content,
ROW_NUMBER() over(order by @@servername) as rownum,
null
from sys.assembly_files af
inner join sys.assemblies a
on af.assembly_id = a.assembly_id
where a.is_visible=1
/*2008 a.is_user_defined = 1*/
--select * from @tb
--从表变量中每次取出一条数据,通过内存循环把varbinary转化为varchar
--最后,拼接产生clr的sql语句,update到表变量中的create_clr_sql字段中
declare @outer_i int; --外层循环变量
declare @count int;
declare @bin varbinary(max)
declare @bin_convert_varchar varchar(max)
declare @inner_i int --内存循环变量
set @outer_i = 1;
set @count = (select COUNT(*) from @tb);
while @outer_i <= @count
begin
set @bin = (select content from @tb where rownum = @outer_i)
select @bin_convert_varchar = '',
@inner_i = datalength(@bin);
while @inner_i>0
begin
select @bin_convert_varchar=
substring('0123456789ABCDEF',substring(@bin,@inner_i,1)/16+1,1)+
substring('0123456789ABCDEF',substring(@bin,@inner_i,1)%16+1,1)+
@bin_convert_varchar,
@inner_i=@inner_i-1
end
update @tb
set create_clr_sql = N'create assembly ['+name+']' +
N' AUTHORIZATION [dbo] ' +
N'FROM 0x' + @bin_convert_varchar +
N' WITH PERMISSION_SET = ' +
case permission_set
when 1 then 'SAFE'
when 2 then 'EXTERNAL'
when 3 then 'UNSAFE'
end
where rownum = @outer_i
set @outer_i = @outer_i + 1
end
--创建crl程序集的sql
select create_clr_sql from @tb
--2.产生函数定义的sql
--创建基于clr程序集的用户自定义函数
select 'create function [dbo].[' + o.name + '](' +
stuff(
(select ',' + c.name +' ' + tp.name +
CASE WHEN tp.name in ('numeric','decimal')
THEN '(' + CAST(c.precision AS VARCHAR) +
',' + CAST(c.scale AS VARCHAR) +
')'
WHEN tp.name in ('varbinary','varchar')
THEN case when c.max_length <> -1
then '(' + CAST(c.max_length AS VARCHAR) + ')'
else '(max)'
end
WHEN tp.name = 'nvarchar'
then case when c.max_length <> -1
then '(' + CAST(c.max_length/2 AS VARCHAR) + ')'
else '(max)'
end
when tp.name = 'nchar'
then '(' + CAST(c.max_length/2 AS VARCHAR) + ')'
WHEN tp.name IN ('binary','bit','char')
THEN '(' + CAST(c.max_length AS VARCHAR) +
')'
ELSE ''
END
from sys.all_parameters c
inner join sys.types tp
on c.system_type_id = tp.system_type_id
and c.user_type_id = tp.user_type_id
where c.object_id = o.object_id
and c.is_output = 0
for xml path('')
),
1,1,''
) +
(select ') returns ' + c.name +' ' + tp.name +
CASE WHEN tp.name in ('numeric','decimal')
THEN '(' + CAST(c.precision AS VARCHAR) +
',' + CAST(c.scale AS VARCHAR) +
')'
WHEN tp.name in ('varbinary','varchar')
THEN case when c.max_length <> -1
then '(' + CAST(c.max_length AS VARCHAR) + ')'
else '(max)'
end
WHEN tp.name = 'nvarchar'
then case when c.max_length <> -1
then '(' + CAST(c.max_length/2 AS VARCHAR) + ')'
else '(max)'
end
when tp.name = 'nchar'
then '(' + CAST(c.max_length/2 AS VARCHAR) + ')'
WHEN tp.name IN ('binary','bit','char')
THEN '(' + CAST(c.max_length AS VARCHAR) +
')'
ELSE ''
END
from sys.all_parameters c
inner join sys.types tp
on c.system_type_id = tp.system_type_id
and c.user_type_id = tp.user_type_id
where c.object_id = o.object_id
and c.is_output = 1
) +
' WITH EXECUTE AS CALLER AS EXTERNAL name [' + a.name + N'].'+
'['+ am.assembly_class +'].[' +
am.assembly_method + '] ;' collate Chinese_PRC_CI_AS
from sys.assemblies a
inner join sys.assembly_modules am
on am.assembly_id = a.assembly_id
inner join sys.objects o
on am.object_id = o.object_id
批量生成clr脚本的更多相关文章
- MS SQL批量生成作业脚本方法介绍总结
在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...
- jinja2批量生成python脚本
在使用airflow的过程中需要大量的dag脚本进行性能测试,如果一个个去编写dag脚本未免太过麻烦,于是想到用python的jinja2模板引擎实现批量脚本生成. 先通过pip命令安装jinja ...
- 批量生成DDL脚本
获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl ...
- openvpn 批量生成用户脚本
#/bin/bash for user in "$@" do echo "新增用户:$user" if [ -d "/etc/openvpn/clie ...
- 批量生成文件夹内所有文件md5
说明:md5批量生成批处理脚本,无需安装任何软件,直接调用系统文件进行生成,简单基于windows命令编写了一个批量生成md5值的脚本. 使用说明:新建文本文档,命名为get_md5.bat,直接将代 ...
- 脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)
问题描述: 由于有一次工作原因,就是将某个文件夹下的所有图片,通过CSS描述他们的属性,用的时候就可以直接引用.但是我觉得那个文件夹下的图片太多,而且CSS文件的格式又有一定的规律,所有想通过脚本来生 ...
- shell脚本批量生成配置文件
如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原 ...
- 转:通过ant来批量执行jmeter脚本,并生成报告(附: 生成报告时报“Content is not allowed in prolog”这个错误的解决方案)
最近在使用jmeter写脚本来进行测试,最终写了很多份脚本,然后,就在想,这么多脚本,我不可能一个一个的手动去点啊,有没有什么办法来批量运行Jmeter脚本呢? 这个时候,自然而然地想到了万能的ant ...
- python脚本批量生成数据
在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...
随机推荐
- JDBC三层架构
三层框架: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 原理:1:数据访问层:主要是对原始 ...
- less简单用法
http://less.bootcss.comless工具:koala工具url:http://koala-app.com/index-zh.html// less import: // less 文 ...
- 新接触PHP课程,给自己定制的目标
PHP课程初接触,对自己的计划和展望恢复 从今天开始了为期四个半月的关于PHP课程的学习.从零开始接触一门新的技术知识,而且还是在短短四个月内就要掌握牢固,其实确确实实感觉不易.可是世间再没有路,不还 ...
- [转]SpringMVC拦截器简单教程
亲测有用,地址: http://blog.csdn.net/tjcyjd/article/details/7498236
- position之fixed固定定位、absolute绝对定位和relative相对定位
什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样,每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧.但是在网 ...
- wampserver配置问题
WAMPServer一些设置的问题 一.WAMPServer修改www目录路径 默认装好WAMPServer之后,会发现www目录路径是在wamp/www目录下,但是这样不满足个人的需求,我想把www ...
- 使用Spring Tool Suite创建Maven Web工程
使用STS或者Eclipse这样的IDE创建Maven Web工程还真不是一般的麻烦! 看了网上不少的方法介绍,操作下来总有区别,不是这里不对就是那里不对. 下面是尝试了几次之后成功的方法,记录一下. ...
- Apache 403 error, (13)Permission denied: access to / denied问题
Apache 配置Alias 后,无法访问 CentOS系统 检查了一圈httpd.conf和目录权限,均没有发现问题. 最后,看了这篇文章,发现是因为系统启动了SELINUX导致的. http:// ...
- Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘
Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...
- 封装properties从配置文件读取测试用例输入数据
当每个测试用例都有输入数据,而且数据量比较大的情况,可以采取从文件读取 如果想让同一套测试用例能够适应相似的输入数据,如果直接代码里面来回切换回可能会漏,而且还需要debug检错 可以把一些公用的输入 ...