第一, 新建类库,引用命名空间,using Microsoft.SqlServer.Server;
第二, 编写一个公共类,含有一个公共的静态函数,并且具有特性:[Microsoft.SqlServer.Server.SqlFunction(DataAccess=DataAccessKind.None)] ,其中的DataAccess=DataAccessKind.None ,意味该函数不访问用户数据,DataAccessKind.Read 枚举值表示需要访问。
第三, 该方法具有返回值, string 类型。
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SqlServer.Server;
using System.Data;
using System.Data.SqlTypes;
namespace SQLFunctionTEST
{
public class SQLFunction
{
[Microsoft.SqlServer.Server.SqlFunction(DataAccess=DataAccessKind.None)]
public static String StringToArray()
{
return "hello,world";
}
}
}
第四, 编译此类库。
第五, 登陆sql,编写以下代码:
CREATE ASSEMBLY SQLFunctionTEST
FROM 'd:\SQLfunctionTEST.dll'
WITH permission_set = Safe;
第六, 这段代码的意思就是从本地一个dll中创建一个程序集,并且设置权限,默认有三种选择:SAFE | EXTERNAL_ACCESS | UNSAFE
Safe模式就是最具限制性的权限集。由具有 SAFE 权限的程序集所执行的代码将无法访问外部系统资源,例如文件、网络、环境变量或注册表。
EXTERNAL_ACCESS 使程序集可以访问某些外部系统资源,例如文件、网络、环境变量以及注册表。
UNSAFE 可使程序集不受限制地访问资源,无论是 SQL Server 实例内部还是外部的资源都可以访问。从 UNSAFE 程序集内运行的代码可调用未托管代码。
好了,这样就创建了一个叫SQLFunctionTEST 的程序集,那么我开始来从这个程序集创建sql function .
第七:
在第一次使用 sql server clr集成功能的时候,需要开启一个clr选项,执行以下语句:
EXEC sp_configure 'clr enabled', '1';
GO
RECONFIGURE;
GO
然后,来创建函数:
CREATE FUNCTION TESTFunction() RETURNS nvarchar(200)
AS EXTERNAL NAME SQLFunctionTEST.[SQLFunctionTEST.SQLFunction]. StringToArray;
这段话是创建一个 Scarlar Valued Function,(译做标量函数?)返回一个nvarchar。但是大家看 SQLFunctionTEST.[SQLFunctionTEST.SQLFunction]. StringToArray;
可能有点犯晕,这是哪跟哪啊?没关系,我来讲讲,第一个SQLFunctionTEST是指的你从哪个程序集创建的,就是你create到数据库的那个程序集的名字,中括号里面的SQLFunctionTEST 就是程序集里面的命名空间,然后接着是类名,中括号右边就是那个静态方法了。然后,我们就可以用这个sql Function了。
declare @x nvarchar (100)
select @x = dbo.Testfunction()
select @x as functionReturnValue
再附上一个使用sql内部连接的函数示例
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlMoney DeterminarValor(string descripcion, int cantidad)
{
SqlMoney resultado = 0;
using (SqlConnection cn = new SqlConnection("context connection=true"))
{
cn.Open();
SqlCommand cmd = new SqlCommand("dbo.TraerItemsPorDescripcion", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@descripcion", " "));
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
resultado = rdr.GetSqlMoney(rdr.GetOrdinal("Precio")) * cantidad;
}
rdr.Close();
}
return resultado;
}
};
对比一下,如果是创建标量函数,那么代码中的静态函数的返回值就是 sql 函数中的返回值,
还要提到的一点就是在clr 创建程序集的sql连接,需要使用 “context connection=true”的连接字符串。这个连接字符串我马上就要介绍这个。
相关推荐
SQL Server CLR集成是SQL Server 2005引入的一项特性,它将Microsoft的.NET Framework与数据库系统相结合。这使得开发人员可以直接在数据库内部执行.NET代码,提高了性能和安全性,并提供了更好的类型安全性和异常...
CLR集成允许开发者使用.NET Framework的语言(如C#、VB.NET等)编写存储过程、触发器、用户定义函数(UDF)、类型和聚合函数等数据库对象。这样可以利用.NET丰富的类库和高级编程特性,提高数据库应用的性能和可维护...
在SQL Server中,CLR集成允许开发者使用.NET Framework的语言(如C#或VB.NET)编写存储过程、触发器和其他数据库对象,从而提升性能和功能。 描述中提到的“部署查看Windows SQL服务器报表”是指在Windows环境下...
CLR集成让开发人员能够直接在SQL Server内部执行托管代码,简化了数据库应用程序的开发流程。具体步骤如下: 1. 开发人员编写托管代码,将用于存储过程、函数、触发器的代码作为类的静态方法,或者将自定义类型和...
CLR集成是SQL Server的一个特性,允许将.NET代码嵌入到数据库中,从而扩展了T-SQL的功能。 首先,我们要理解什么是CLR。CLR是Microsoft .NET Framework的一部分,它负责管理代码的执行,包括内存管理、类型安全、...
SQL Server的CLR集成允许用户使用.NET编程语言(如C#或VB.NET)编写存储过程、触发器、函数等数据库对象。SQLSysClrTypes库则包含了处理这些对象所必需的类型和接口,例如,它可以处理空间数据类型,这对于地理信息...
#### 一、SQL Server 2005与CLR集成技术概览 - **CLR(Common Language Runtime)集成**:CLR是.NET Framework的核心组件之一,它为.NET程序提供了一个运行时环境,包括内存管理、类型安全以及代码执行等服务。SQL ...
标题提到的"SqlServer自定义多参数聚合函数实例代码"就是针对这种情况提供的一种解决方案。 自定义聚合函数通常通过两种方式实现:T-SQL(Transact-SQL)或CLR(Common Language Runtime)。T-SQL方式适用于简单的...
SQL Server提供了一种称为Common Language Runtime (CLR) 的功能,它允许使用.NET Framework的语言(如C#或VB.NET)编写存储过程、函数、触发器等数据库对象。在本篇文章中,我们将深入探讨如何利用SQL Server CLR...
在SQL Server中,CLR集成允许开发者使用.NET Framework的全部功能来编写存储过程、用户定义的函数、用户定义的类型、触发器和聚合函数。这样做的好处包括: 1. **性能提升**:对于需要大量计算的任务,使用CLR可以...
当然,启用和管理SQL Server中的CLR集成需要注意一些安全和性能问题。你应该限制对CLR的访问,只允许经过验证和安全的代码运行。同时,要监控CLR对象的性能,确保它们不会成为系统资源的瓶颈。 在提供的".sql"文件...
本章将深入探讨如何利用CLR集成来创建自定义的存储过程、触发器、用户定义函数(UDF)、类型和表值函数等,以提升SQL Server的性能和灵活性。 1. CLR简介:CLR是Microsoft .NET Framework的核心部分,负责执行.NET...
1. **启用CLR集成**: - 连接到SqlServer实例。 - 运行以下T-SQL命令: ```sql EXEC sp_configure 'clr enabled', 1; RECONFIGURE; ``` 2. **创建Assembly**: - 使用`CREATE ASSEMBLY`命令创建一个新的...
CLR集成是SQL Server 2005中的一项重要创新,它将.NET Framework引入到数据库引擎内部,使得数据库开发者可以利用.NET的强大功能。通过CLR,我们可以创建更高效、更安全、更易维护的数据库对象,这些对象可以直接在...
《SQL Server 2005的CLR集成》 SQL Server 2005引入了一项重大创新,即CLR(Common Language Runtime)集成,这使得数据库开发者可以利用.NET Framework的编程语言,如C#或Visual Basic .NET,来编写存储过程、函数...
2. 安全性:在SQL Server中启用CLR集成时,会根据SQL Server的安全策略执行.NET代码。可以通过设置数据库级别的选项(如`TRUSTWORTHY`和`PERMISSION_SET`)来控制CLR对象的权限。 3. 性能优化:SQL Server会缓存...
标题中的“microsoft system clr types for sql server 2014”是指Microsoft SQL Server 2014的系统公共语言运行库类型(System CLR Types),它是一组.NET Framework类库,用于与SQL Server进行交互,特别是在处理...