T-SQL 中是可以调用 OLE 的,将这一功能应用到触发器、存储过程等对象中,SQL Server 运用变得更贴近我们的功能,更加满足我们的需要。

T-SQL 中有七个存储过程是围绕本节内容进行的,我们只介绍其中最常用的四个存储过程,其余内容您可以参见 SQL Server 联机丛书。

  • sp_OACreate 创建 OLE 对象实例。
  • sp_OAMethod 调用 OLE 对象的方法。
  • sp_OAGetErrorInfo 获取 OLE 自动化错误信息。
  • sp_OADestroy 释放已创建的 OLE 对象。

1、示例

我们以ASP中常见的Scripting.FileSystemObject介绍如何利用T-SQL调用DLL。

首先看一个示例,为了便于您在SQL查询分析器中测试,本示例中添加了两句输出代码(已经在示例中注明),您在应用到触发器或存储过程时,应该去掉这两句,另外在关键语句的后面添加了等效的ASP语句,便于您理解。

DECLARE @errCode int

DECLARE @fso int

EXEC @errCode = sp_OACreate 'Scripting.FileSystemObject', @fso OUT /*等效于:set fso = Server.CreateObject("Scripting.FileSystemObject")*/
if @errCode <> 0
BEGIN
DECLARE @description varchar(256)
EXEC sp_OAGetErrorInfo @fso, NULL, @description OUT
PRINT @description /*SQL 查询分析器中有效*/
END DECLARE @exists bit
EXEC sp_OAMethod @fso, 'FileExists', @exists OUT, 'C:\foo.txt' /*等效于:exists = fso.FileExists("C:\foo.txt")*/
PRINT @exists /*SQL 查询分析器中有效*/ DECLARE @f int
EXEC sp_OAMethod @fso, 'CreateTextFile', @f OUT, 'C:\foo.txt', 1 /*等效于:set f = fso.CreateTextFile("C:\foo.txt", true)*/
EXEC sp_OAMethod @f, 'Write', NULL, '写一行内容' /*等效于:f.Write("写入内容")*/
EXEC sp_OAMethod @f, 'Close' /*等效于:f.Close*/
EXEC sp_OADestroy @f /*等效于:set f = nothing*/ EXEC sp_OADestroy @fso /*等效于:set fso = nothing*/

上述中 bit 类型的值 1 表示 true,bit 类型的值 0 表示 false。

示例将判断 C 盘下是否存在 foo.txt,并且创建一个 foo.txt,并向其中写入一行文字。

代码似乎有些多,不过您有兴趣一定要仔细看完,因为并不复杂,而且它涵盖了最常用的代码。

2、讲解

  • sp_OACreate 创建 OLE 对象实例。

    • 第一个参数为 OLE 对象的程序标识符(ProgID)或类标识符(CLSID)。
    • 第二个参数为返回的对象令牌,必须是数据类型为 int 的局部变量,在后面的方法中都要用到对象令牌。输出参数,必须加 OUT 或 OUTPUT。
  • sp_OAMethod 调用 OLE 对象的方法。

    • 第一个参数为对象令牌。
    • 第二个参数为方法名称。
    • 第三个参数为方法的返回值,如果方法返回的是对象,则该参数类型为 int。输出参数,必须加 OUT 或 OUTPUT。
    • 第四个及以后的参数为方法的参数值,如果方法的参数是输出参数,则要加上 OUT 或 OUTPUT。
    • sp_OAMethod也可用来获取属性值。
  • sp_OAGetErrorInfo 获取 OLE 自动化错误信息。

    • 第一个参数为对象令牌。
    • 第二个参数为错误信息的来源。输出参数,必须加 OUT 或 OUTPUT。
    • 第三个参数为错误的描述。输出参数,必须加 OUT 或 OUTPUT。
  • sp_OADestroy 释放已创建的 OLE 对象。

    • 第一个参数为对象令牌。
  • sp_OAGetProperty 获取 OLE 对象的属性值

  • sp_OASetProperty 将 OLE 对象的属性设置为新值

  • sp_OAStop 停止服务器范围内的 OLE 自动化存储过程执行环境。

这七个存储过程都有返回值,如果返回值是 0 表示成功,其它值表示失败,示例中只对 sp_OACreate 的返回值作了判断。

3、扩展

T-SQL 中还可以利用 sp_addextendedproc 向 SQL Server 注册新扩展存储过程的名称,但是 SQL Server 2005 联机丛书中已经说明将在后续版本中删除该功能,不建议我们继续使用该存储过程,所以这里不介绍 sp_addextendedproc

SQL Server调用OLE对象的更多相关文章

  1. ADO.NET访问SQL Server调用存储过程带回参

    1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign  use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...

  2. SQL Server 调用 C# 方法实现正则表达式验证

    Ø  前言 1.   在 SQL Server 中默认是不支持正则表达式验证的,如果需要某个字符串匹配一个正则表达式的验证规则,就需要额外的编写 C# 方法,并发布到 SQL Server 数据库中. ...

  3. 在SQL Server中查看对象依赖关系

    原文 在SQL Server中查看对象依赖关系 Viewing object dependencies in SQL Server   Deleting or changing objects may ...

  4. sql server 调用webservice

    sql server版本2008以上,应该都可以 更改服务器配置 sp_configure ; GO RECONFIGURE; GO sp_configure ; GO RECONFIGURE; GO ...

  5. SQL Server修改数据库对象所有者(Owner)浅析

    在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...

  6. Sql Server 调用DLL

    背景 在处理数据或者分析数据时,我们常常需要加入一定的逻辑,该些处理逻辑有些sql是可以支持,有些逻辑SQL则无能为力,在这种情况下,大多数人都会编写相关的程序来处理成自己想要的数据,但每次处理相同逻 ...

  7. SQL Server 判断各种对象是否存在和sysobjects的关系

    一.判断表是否存在 object_id():获取表的ID,其中N表示Unicode类型.可以支持不同语种的对象名 ) drop table [dbo].[表名] 二.判断要创建的存储过程名是否存在 ) ...

  8. SQL SERVER 2012 第五章 创建和修改数据表 の SQL SERVER中的对象名

    [ServerName.[DataBaseName.[SchemeName.]]]ObjectName 服务器名,数据库名,模式名,对象名 其中模式是一个新出的坑爹的东西.

  9. SQL SERVER调用textcopy写文件

    SET @PATH = 'textcopy /S ' + @LServer + ' /U '+ @LUser + ' /P '+ @LPass + ' /D '+ @LDB + ' /T '+@tab ...

  10. PowerDesigner16建表在SQL SERVER 2008报 对象名 'sysproperties' 无效。

    http://blog.itpub.net/30150152/viewspace-1454979/

随机推荐

  1. SqlServer 死锁查询

    use master go create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountO ...

  2. Vue 3指令与事件处理

    title: Vue 3指令与事件处理 date: 2024/5/25 18:53:37 updated: 2024/5/25 18:53:37 categories: 前端开发 tags: Vue3 ...

  3. C# xml与对象相互转换

    例如: 1.对象转xml(对象序列化为xml) string strImage= XmlSerializeHelper.Serialize<List<ImageSingle>> ...

  4. 基于centos7的企业级ceph集群搭建[nautilus14.22版]

    集群规划 本案例通过ceph-deploy方式部署 主机名 配置 外网IP / 内网IP 角色 系统版本 ceph-node01 磁盘x3 50G 192.168.3.101/24 172.16.1. ...

  5. redis安装和基础使用

    redis安装 mkdir /server/tools -p cd /server/tools echo 'PATH=/usr/local/redis/src:$PATH' >>/etc/ ...

  6. C#开源实用的工具类库,集成超过1000多种扩展方法

    前言 今天大姚给大家分享一个C#开源(MIT License).免费.实用且强大的工具类库,集成超过1000多种扩展方法增强 .NET Framework 和 .NET Core的使用效率:Z.Ext ...

  7. Android应用程序启动流程浅析-(三万字长文慎点&Android14)

    在Android桌面Launcher源码浅析中介绍了Android的桌面程序Launcher是如何响应用户点击事件并启动App的,这篇文章继续介绍App在Android系统层是的启动流程. 一.启动流 ...

  8. 浏览器的同源策略 jsonp方法解决跨域

    // 浏览器的同源性         // 在 浏览器 处理请求时 默认执行的是 同源策略         // 也就是 浏览器 只 允许 同源的项目/请求 之间 获取响应体内容         // ...

  9. kettle从入门到精通 第五十五课 ETL之kettle Excel输入

    1. Excel输入,Microsoft Excel输入步骤的作用是从Microsoft Excel中读取数据,如下图所示: 1)Excel输入步骤从文件D:\data\测试数据.xlsx读取数据. ...

  10. es6.6.1 索引的增加,查询,修改,删除

    1.新增 test2/user2/1/_create PUT操作{"name":"qiqi","age":17} 2.查询 test2/us ...