问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何:创建和运行 CLR SQL Server 用户定义的函数

发布网友 发布时间:2022-04-08 07:32

我来回答

2个回答

懂视网 时间:2022-04-08 11:53

1. 创建项目:

技术分享

技术分享

2. 添加函数代码:

using System;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.Data.SqlTypes;
using System.Diagnostics;

public class TabularEventLog
{
 [SqlFunction(TableDefinition = 
@"logTime datetime
,Message nvarchar(4000)
,Category nvarchar(4000)
,InstanceId bigint",
 Name = "ReadEventLog", FillRowMethodName = "FillRow")]
 public static IEnumerable InitMethod(String logname)
 {
 return new EventLog(logname, Environment.MachineName).Entries;
 }

 public static void FillRow(Object obj, out SqlDateTime timeWritten,
 out SqlChars message, out SqlChars category,
 out long instanceId)
 {
 EventLogEntry eventLogEntry = (EventLogEntry)obj;
 timeWritten = new SqlDateTime(eventLogEntry.TimeWritten);
 message = new SqlChars(eventLogEntry.Message);
 category = new SqlChars(eventLogEntry.Category);
 instanceId = eventLogEntry.InstanceId;
 }
}

3. 脚本:

USE MASTER
GO
sp_configure 'show advanced options',1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
--表值函数放在 db_study 库上
USE db_study
GO
--删除函数
IF OBJECT_ID('[dbo].[ReadEventLog]') IS NOT NULL
	DROP FUNCTION [dbo].ReadEventLog
GO
--删除程序集
IF EXISTS(SELECT * FROM SYS.ASSEMBLIES WHERE NAME='tvfEventLog') 
	DROP ASSEMBLY tvfEventLog
GO
--创建程序集, 设置为实际路径, 注意应设置为: UNSAFE
CREATE ASSEMBLY tvfEventLog FROM'D:ProjectStudySimpleSqlServerProject1inDebugSqlServerProject1.dll' WITH PERMISSION_SET = UNSAFE
GO
--创建表值函数
CREATE FUNCTION dbo.ReadEventLog(@logname nvarchar(100))
RETURNS TABLE (
	logTime DATETIME
	,Message nvarchar(4000)
	,Category nvarchar(4000)
	,InstanceId BIGINT
)
AS
	EXTERNAL NAME tvfEventLog.TabularEventLog.InitMethod 
GO
--查询
SELECT TOP 10 T.logTime, T.Message, T.InstanceId
FROM dbo.ReadEventLog(N'Security') as T
ORDER BY logTime DESC


技术分享


参考:http://www.microsoft.com/china/msdn/library/data/sqlserver/bb293147.mspx?mfr=true

此页面做法有问题: https://msdn.microsoft.com/zh-cn/library/ms131103(v=sql.120).aspx


版权声明:本文为博主原创文章,未经博主允许不得转载。

SqlClr:创建一个简单的表值函数

标签:sqlclr

热心网友 时间:2022-04-08 09:01

部署成功后,可调用并执行用户定义的函数。注意
在默认情况下,Microsoft
SQL
Server
中关闭了
公共语言运行库
(CLR)
集成功能。必须启用该功能才能使用
SQL
Server
项目项。若要启用
CLR
集成,请使用
sp_configure
存储过程
的“启用
clr”选项。有关更多信息,请参见启用
CLR
集成。注意显示的对话框和菜单命令可能会与帮助中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见
Visual
Studio
设置。
创建用户定义的
SQL
Server
函数
使用Visual
Studio
建立和部署此函数
C++
示例在编译时必须使用
/clr:safe
编译器
选项。
对于Visual
Basic

Visual
C#,在“解决方案
资源管理器
”中,打开“TestScripts”文件夹,然后双击“Test.sql”文件,以打开它进行编辑。添加执行您的
用户定义函数
的代码。请参见下面的第二个示例。对于Visual
C++,在“解决方案资源管理器”中双击“debug.sql”文件,以打开它进行编辑。添加执行您的用户定义函数的代码。请参见下面的第二个示例。将用户定义函数部署到
SQL
Server。有关更多信息,请参见如何:将
SQL
Server
项目项部署到
SQL
Server
中。按F5
通过在
SQL
Server
上执行用户定义的函数来对其进行调试。下面的代码示例创建用户定义的将价格作为参数的
标量函数
addTax,添加
销售税
并返回价格和销售税的加和。创建该函数后,将其部署到
SQL
Server。有关更多信息,请参见如何:将
SQL
Server
项目项部署到
SQL
Server
中Visual
Basic
复制代码
Imports
System.Data.SqlTypes
Imports
Microsoft.
SqlServer
.ServerPartial
Public
Class
UserDefinedFunctions
Public
Const
SALES_TAX
As
Double
=
0.086
_
Public
Shared
Function
addTax(ByVal
originalAmount
As
SqlDouble)
As
SqlDouble
Dim
taxAmount
As
SqlDouble
=
originalAmount
*
SALES_TAX
Return
originalAmount
+
taxAmount
End
FunctionEnd
ClassC#
复制代码
using
System.Data.SqlTypes;
using
Microsoft.SqlServer.Server;public
partial
class
UserDefinedFunctions{public
const
double
SALES_TAX
=
.086;
[SqlFunction()]
public
static
SqlDouble
addTax(SqlDouble
originalAmount){SqlDouble
taxAmount
=
originalAmount
*
SALES_TAX;
return
originalAmount
+
taxAmount;}}C++
复制代码
#include
"stdafx.h"#using
#using
#using
using
namespace
System;
using
namespace
System::Data;
using
namespace
System::Data::Sql;
using
namespace
System::Data::SqlTypes;
using
namespace
Microsoft::SqlServer::Server;//
In
order
to
debug
your
Aggregate,
add
the
following
to
your
debug.sql
file:////
SELECT
dbo.addTax(10)
//public
ref
class
UserDefinedFunctions{public:static
initonly
double
SALES_TAX
=
0.086;
[SqlFunction()]
static
SqlDouble
AddTax(SqlDouble
originalAmount){SqlDouble
taxAmount
=
originalAmount
*
SALES_TAX;
return
originalAmount
+
taxAmount;}};向您的项目中
TestScripts
文件夹中的
Test.sql(在
Visual
C++
中为
debug.sql)文件,添加用于测试用户定义函数的代码。例如,若要测试此函数,请使用查询,如“SELECT
dbo.addTax(10)”。您应见到返回的值“10.86”。
复制代码
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
猛禽点烟器在什么位置? 哪家公司的Burkert角座阀性价比更高? 腊肠炒青豆做法 香肠炒青豆的家常做法大全怎么做好吃 我想模仿一个淘宝大店铺'主要是因为他们销量很好,。我想生产他们的... 模仿别人淘宝店铺算侵权吗?侵权赔偿标准介绍 applexsmax突然黑屏 大雁气功当代传人 贷款担保合同签字担保人没有来是不是有效 当一个习惯养成的时候,是不是戒不掉了 大广高速在那办进京证 衡水去北京走大广高速在哪里办进京证 请问质量和Carhartt主线工装裤类似的牌子有哪些品牌。 carhartt wip 短款钥匙绳 怎么用好看 美国那个网站买carhartt wip的衣服比较便宜!!! 身高176体重144穿 carhartt夹克M码会不会大了? MADNESS x Carhartt WIP一拳公开,新番究竟与爱因斯坦有何关系 我明天休假在钉钉里要发周报结果我发了日报怎么办?要改吗?不管的话明天要写吗 钉钉上面周报月报为什么现在修改和删除不了,以前是可以的,怎么回事啊? sql怎么建表内值函数 商业模式的力量的作者简介 mac os 怎样sanchu 什么公司的顶层设计培训干货多? 时代华商董事长班资本班怎样/靠不靠谱? 时代华商资本总裁班怎样?靠不靠谱? 苹果手机和Mac系统有两个罗马数字10呀? 明德ITD顶层设计怎么样? 时代华商金融PE班怎样?靠不靠谱? 在mac里怎样才能输入罗马等特殊字符? 时代华商金融总裁班怎样?靠不靠谱? 我在网上申办进京证,输入验证码后,显示请求参数不能为空,什么意思_百度问一问 电子进京证申请几十次审核失败怎么回事? 大广高速进京检查站叫什么名字大广高速进京的北检查站叫什么名字? 从大广高速进京在哪里办理进京证呀!是收费站吗 大广高速公路在哪办进京证 大广高速河北固安收费站电话是多少 梦见奶奶家房顶有洞,可以看见蓝天,然后爸爸用什么东西给盖住了。请问这是什么寓意? 梦见我在我妈家房顶上坐着,又上来好多人坐着,有人把房顶踩了窟窿? 梦见家里房顶有个大洞抬头看到蓝天和太阳 led显示屏控制卡测试按钮测试全部正常就是不出字怎么回事 小太阳鹦鹉哪个品种好? 小太阳鹦鹉哪个品种好 小太阳鹦鹉鸟怎么样?黄边的好还是肉桂的好?谢谢了! 小太阳鹦鹉 分几种 有凤梨 黄边,肉桂。请问哪种好 从等级低到高 排列。每个品种价钱是多少钱? 小太阳鹦鹉的品种 小太阳鹦鹉和小绯胸鹦鹉哪个好 如何挑选小太阳鹦鹉 养什么鹦鹉好 我想买两只小太阳鹦鹉要怎么配对?黄边和凤梨品种哪个公哪个母? 小太阳鹦鹉公母哪个好