在SQL Server 2005中运行CLR
2008-03-20 18:28
162 查看
一个简单的创建SQLCLR的实例:
SQL:启用SQLCLR
EXEC sp_configure 'clr enabled', 1 -- 在默认情况下,SQL Server 2005中该属性是置为0的。
Reconfigure With Override
创建源代码
对于SQLCLR其是使用CLR语言来编写存储过程(函数以及触发器等,本质上还是存储过程)。故其是面向过程的,其只能调用类的方法,且必须是 public 且 static 的方法,SQLCLR不会去创建一个类的实例。
以下是一个简单的.cs文件编译成.dll后加载入SQL Server
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using Microsoft.SqlServer.Server; // 该名称空间位于System.Data.dll程序集中
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void SayHi()
{
SqlContext.Pipe.Send("Hi C# World from SQL Server!"); // 调用SqlContext上下文对象输出一行文本
}
public static void GetCsGreeting(string name, out string greeting) // 用以创建带参数的存储过程
{
greeting = String.Format("Hello from C#, {0}", name);
}
}
}
///////////////////////////////////////////////////////////////////////
在上述代码中,使用了上下文对象。这种对象用于访问已激活的SQLCLR环境。
安装程序集并注册存储过程
--------------------------------------------------------------------
Create Assembly CsProcs From 'C:SQLCLR_SampleHiCsWorld.dll'
With Rermission_Set=SAFE
Go
Create Procedure SayCsHi
As External Name CsProcs.[CsTestNamespace.CsTestClass].SayHi
--------------------------------------------------------------------
注册程序集时,可以设置三种执行权限:
SAFE 只能访问CLR代码和数据库中的数据。不能访问非托管代码、外部资源和线程管理。
Exteernal_Access 可以访问外部资源(文件系统、事件日志、网络以及其他数据库服务器)。不能访问非托管代码。
UNSAFE 对访问对象不做任何限制,在有COM组件时必须使用该安全级别。
注:对于后两种执行权限,必须将数据库的Trustworthy属性置为On。
Alter Database Northwind Set Trustworthy On
以下是一个带参数的存储过程示例:(.dll文件即上述"HiCsWorld.cs")
Create Procedure GetCsGreeting -- 创建存储过程
@name nvarchar(50),
@greeting nvarchar(100)
As External Name CsProcs.[CsTestNamespace.CsTestClass].GetCsGreeting
Declare @Result nvarchar(100) -- 调用该存储过程,注意输出参数的使用
Exec GetCsGreeting 'Current User', @Result Output
Select @Result
以下是一个返回行集(Table)数据的CLRSQL存储过程
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void GetWords(Int32 rowSum)
{
SqlDataRecord rec = new SqlDataRecord(
new SqlMetaData("Index", SqlDbType.Int),
new SqlMetaData("Word", SqlDbType.NVarChar, 50)); // 定义列的结构
SqlContext.Pipe.SendResultsStart(rec);
for (Int32 i = 0; i < rowSum; i++)
{
rec.SetInt32(0, i);
rec.SetString(1, String.Format("Word{0,2}", i.ToString()));
SqlContext.Pipe.SendResultsRow(rec); // 逐行写入列值
}
SqlContext.Pipe.SendResultsEnd();
}
}
}
///////////////////////////////////////////////////////////////////////
SQL:启用SQLCLR
EXEC sp_configure 'clr enabled', 1 -- 在默认情况下,SQL Server 2005中该属性是置为0的。
Reconfigure With Override
创建源代码
对于SQLCLR其是使用CLR语言来编写存储过程(函数以及触发器等,本质上还是存储过程)。故其是面向过程的,其只能调用类的方法,且必须是 public 且 static 的方法,SQLCLR不会去创建一个类的实例。
以下是一个简单的.cs文件编译成.dll后加载入SQL Server
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using Microsoft.SqlServer.Server; // 该名称空间位于System.Data.dll程序集中
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void SayHi()
{
SqlContext.Pipe.Send("Hi C# World from SQL Server!"); // 调用SqlContext上下文对象输出一行文本
}
public static void GetCsGreeting(string name, out string greeting) // 用以创建带参数的存储过程
{
greeting = String.Format("Hello from C#, {0}", name);
}
}
}
///////////////////////////////////////////////////////////////////////
在上述代码中,使用了上下文对象。这种对象用于访问已激活的SQLCLR环境。
安装程序集并注册存储过程
--------------------------------------------------------------------
Create Assembly CsProcs From 'C:SQLCLR_SampleHiCsWorld.dll'
With Rermission_Set=SAFE
Go
Create Procedure SayCsHi
As External Name CsProcs.[CsTestNamespace.CsTestClass].SayHi
--------------------------------------------------------------------
注册程序集时,可以设置三种执行权限:
SAFE 只能访问CLR代码和数据库中的数据。不能访问非托管代码、外部资源和线程管理。
Exteernal_Access 可以访问外部资源(文件系统、事件日志、网络以及其他数据库服务器)。不能访问非托管代码。
UNSAFE 对访问对象不做任何限制,在有COM组件时必须使用该安全级别。
注:对于后两种执行权限,必须将数据库的Trustworthy属性置为On。
Alter Database Northwind Set Trustworthy On
以下是一个带参数的存储过程示例:(.dll文件即上述"HiCsWorld.cs")
Create Procedure GetCsGreeting -- 创建存储过程
@name nvarchar(50),
@greeting nvarchar(100)
As External Name CsProcs.[CsTestNamespace.CsTestClass].GetCsGreeting
Declare @Result nvarchar(100) -- 调用该存储过程,注意输出参数的使用
Exec GetCsGreeting 'Current User', @Result Output
Select @Result
以下是一个返回行集(Table)数据的CLRSQL存储过程
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void GetWords(Int32 rowSum)
{
SqlDataRecord rec = new SqlDataRecord(
new SqlMetaData("Index", SqlDbType.Int),
new SqlMetaData("Word", SqlDbType.NVarChar, 50)); // 定义列的结构
SqlContext.Pipe.SendResultsStart(rec);
for (Int32 i = 0; i < rowSum; i++)
{
rec.SetInt32(0, i);
rec.SetString(1, String.Format("Word{0,2}", i.ToString()));
SqlContext.Pipe.SendResultsRow(rec); // 逐行写入列值
}
SqlContext.Pipe.SendResultsEnd();
}
}
}
///////////////////////////////////////////////////////////////////////
相关文章推荐
- sql server 2005 使用clr函数压缩ntext类型字段
- 开启SQL SERVER 2005的CLR集成
- 在SQL Server 2005上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败,如何处理?
- SQL Server 2005-----CLR集成
- SQL Server 2005 CLR用户定义函数实现正则表达式
- SQL Server 2005 - 如何从CLR存储过程传回表格结果与讯息(二)
- 尝试的基于 Windows Server 2003 计算机上运行 SQL Server 2005 实例上安装 UDDI 服务数据库组件时可能收到错误信息
- SQL Server 2005中的CLR(2)
- 监控 SQL Server (2005/2008) 的运行状况--来自微软TetchNet
- XP系统无法运行SQL Server 2005企业版
- SQL SERVER 2005 CLR 部署的DEMO
- SQL Server 2005 和JBOSS 4 系统运行缓慢--高并发系统探讨(1)
- SQL SERVER 2005 CLR集成之简单SQL函数讲解
- SQL Server 2005 CLR用户定义函数实现正则表达式
- 运用SQL SERVER 2005 CLR解决XML Showplan实例教程
- ASP.NET2.0+SQL Server2005构建多层应用[使用SQL Server 2005 的CLR存储过程]
- SQL Server 2005 DTS wizard 无法运行,微软SQL Server 2005的升级包实在是差劲呀!
- SQL Server 2005 - 实作CLR存储过程
- 监控 SQL Server (2005/2008) 的运行状况--来自微软TetchNet
- SQL Server 2005 - 如何实作CLR存储过程来传回讯息