您的位置:首页 > 数据库

SQLCLR在Visual Studio中创建存储过程、自定义函数、聚集、触发器等方法(转)

2011-02-22 14:46 921 查看
由于时间的缘故,创建存储过程、自定义函数、聚集、触发器等内容转自别人的文章。

文章来源:http://www.cnblogs.com/doc/archive/2009/02/11/1388513.html

SQLCLR(一)存储过程

存储过程方法上方标注[Microsoft.SqlServer.Server.SqlProcedure]
存储过程:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
执行存储过程
DECLARE @name nvarchar(4000)
DECLARE @outstr nvarchar(4000)
set @name='david fan'
-- TODO: 在此处设置参数值。
EXECUTE [TestProject].[dbo].[TestStoredProcedure]
@name
,@outstr OUTPUT
print @outstr

结果如下:
[align=center]using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.IO;
using System.Security.Principal;

public partial class UserDefinedFunctions
ALTER DATABASE TestProject SET TRUSTWORTHY ON;[/align] 成功后,项目右键部署

查询分析器中执行
SELECT * FROM [TestProject].[dbo].[FileListCs] (
'c:\'
,'*.txt')


结果如下:

[align=center]using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
SELECT [TestProject].[dbo].[ScalarFunction] ()[/align]

结果如下:

[align=center]using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;

public partial class Triggers
[/align]
右键部署。

数据库里的两张表
[align=center]update [NameInfo] set [name]='David' where id=1
update [nameinfo] set [name]='Fan' where id=2[/align]

结果:

[align=center]update [NameInfo] set [name]='*David*' where id=1
update [nameinfo] set [name]='*Fan*' where id=2[/align]

再看结果:

[align=center]using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.UserDefined, MaxByteSize = 1024)]
public struct Person : INullable, IBinarySerialize

[/align]
部署后在SQL Server 2005中执行下面的语句
create table UdtTest (Id int not null, p Person not null)
insert into UdtTest values(1, 'David,24岁,男')
select id, convert(nvarchar(25),p) from UdtTest
drop table UdtTest


结果如下:

[align=center]using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.IO;
using System.Text;

[Serializable]
[SqlUserDefinedAggregate(
Format.UserDefined, //use clr serialization to serialize the intermediate result
IsInvariantToNulls = true, //optimizer property
IsInvariantToDuplicates = false, //optimizer property
IsInvariantToOrder = false, //optimizer property
MaxByteSize = 8000) //maximum size in bytes of persisted value
]
public class Concatenate : IBinarySerialize
CREATE TABLE BookAuthors
(
BookID int NOT NULL,
AuthorName nvarchar(200) NOT NULL
)

INSERT BookAuthors VALUES(1, 'Johnson')
INSERT BookAuthors VALUES(2, 'Taylor')
INSERT BookAuthors VALUES(3, 'Steven')
INSERT BookAuthors VALUES(2, 'Mayler')
INSERT BookAuthors VALUES(3, 'Roberts')
INSERT BookAuthors VALUES(3, 'Michaels')
[/align]
SELECT BookID, dbo.MyAgg(AuthorName)
FROM BookAuthors
GROUP BY BookID
结果如下
BookID Author Names
1

Johnson

2

Taylor, Mayler

3

Roberts, Michaels, Steven

Microsoft SQL Server Management Studio为我们提供了数据库内对象的集中管理功能,前面几篇创建的SQLCLR对象,都可以在数据库的可编程性下相应模块里找到。



-----------------------------------------------------------------------

系列文章目录

SQLClR的开启SQLCLR入门用法SQLCLR在Visual Studio中创建方法SQLCLR在Visual Studio中创建存储过程、自定义函数、聚集、触发器等方法(转)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐