什么是扩展存储过程?
扩展存储过程使您得以使用象 C 这样的编程语言创建自己的外部例程对用户来说扩展存储过程与普通存储过程一样执行方法也相同可将参数传递给扩展存储过程扩展存储过程可返回结果也可返回状态扩展存储过程可用于扩展 Microsoft® SQL Server; 的功能
扩展存储过程是 SQL Server 可以动态装载并执行的动态链接库 (DLL)扩展存储过程直接在 SQL Server 的地址空间运行并使用 SQL Server 开放式数据服务 (ODS) API 编程
编写好扩展存储过程后固定服务器角色 sysadmin 的成员即可在 SQL Server 中注册该扩展存储过程然后授予其他用户执行该过程的权限扩展存储过程只能添加到 master 数据库中
使用 C# 编写扩展存储过程
下面就以一个简单的例子来演示如何用 C#编写扩展存储过程
首先我们创建一个简单的C#类库文件
//C# file: Csservercs
using System;
using SystemRuntimeInteropServices;
using SystemReflection;
using SystemRuntimeCompilerServices;
[assembly: AssemblyTitle(CSServer)]
[assembly: AssemblyDescription(Test SQL NET interop)]
[assembly: AssemblyVersion()]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile(MyKeysnk)]
namespace SQLInterop {
public interface ITest{
string SayHello();
}
[ClassInterface(ClassInterfaceTypeAutoDual)]
public class CsharpHelper : ITest {
public string SayHello() {
return Hello from CSharp;
}
}
}
然后创建用sn k 为该类库创建一个强名密钥文件并编译之
sn k MyKeysnk
csc /t:library Csservercs
注册该类库
regasm /tlb:Csservertlb csserverdll /codebase
这样一个扩展存储过程就编写注册完了下面我们在sqlserver中测试一下效果
TSQL stored proc
DECLARE @object int
DECLARE @hr int
DECLARE @property varchar()
DECLARE @return varchar()
DECLARE @src varchar() @desc varchar()
创建对象实例
EXEC @hr = sp_OACreate SQLInteropCsharpHelper @object OUT
IF @hr <>
BEGIN
EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT
SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc
RETURN
END
调用对象方法
EXEC @hr = sp_OAMethod @object SayHello @return OUT
IF @hr <>
BEGIN
EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT
SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc
RETURN
END
PRINT @return
销毁对象实例
EXEC @hr = sp_OADestroy @object
IF @hr <>
BEGIN
EXEC sp_OAGetErrorInfo @object @src OUT @desc OUT
SELECT hr=convert(varbinary()@hr) Source=@src Description=@desc
RETURN
END