可以,你可以用:
sp_OACreatesp_OAGetPropertysp_OASetPropertysp_OAMethodsp_OADestroy
这几个扩展存储过程来调用外部程序接口.

解决方案 »

  1.   

    这是一个 Transact-SQL 语句批处理示例,它使用 OLE 自动化存储过程创建和使用 SQL-DMO SQLServer 对象。该代码的一些部分被用作存储过程引用示例。DECLARE @object int
    DECLARE @hr int
    DECLARE @property varchar(255)
    DECLARE @return varchar(255)
    DECLARE @src varchar(255), @desc varchar(255)-- 创建 SQLServer 对象。
    SET NOCOUNT ON-- 首先,创建对象。
    EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
    IF @hr <> 0
       -- Report the error.
       EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
       SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
       GOTO END_ROUTINE
    ELSE
       -- 成功创建了对象。
       BEGIN
          -- 设置属性。
          EXEC @hr = sp_OASetProperty @object, 'HostName', 'Gizmo'
          IF @hr <> 0 GOTO CLEANUP
          
          -- 使用输出参数获取属性。
          EXEC @hr = sp_OAGetProperty @object, 'HostName', @property OUT
          IF @hr <> 0 
             GOTO CLEANUP
          ELSE
             PRINT @property
          
          -- 使用结果集获取属性。
          EXEC @hr = sp_OAGetProperty @object, 'HostName'
          IF @hr <> 0 GOTO CLEANUP      -- 通过调用方法获取属性。
          EXEC @hr = sp_OAMethod @object, 'HostName', @property OUT
          IF @hr <> 0 
             GOTO CLEANUP
          ELSE
             PRINT @property      -- 调用方法。
          -- 安全说明 - 如果可能,请使用 Windows 身份验证。
          EXEC @hr = sp_OAMethod @object, 'Connect', NULL, 'my_server', 'my_login', 'my_password'
          IF @hr <> 0 GOTO CLEANUP
          
          -- 调用返回值的方法。
          EXEC @hr = sp_OAMethod @object, 'VerifyConnection', @return OUT
          IF @hr <> 0
             GOTO CLEANUP
          ELSE
             PRINT @return
       ENDCLEANUP:
       -- 检查是否出错。
       IF @hr <> 0
       BEGIN
          -- Report the error.
          EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
          SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
       END   -- 破坏对象。
       BEGIN
          EXEC @hr = sp_OADestroy @object
          -- 检查是否出错。
          IF @hr <> 0 
          BEGIN
             -- 报告错误。
             EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
             SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
          END
       ENDEND_ROUTINE:
    RETURN
      

  2.   

    --如果是接口处理比较复杂,可以自己先写成DLL,再在SQL中调用,下面是一个最简单的示例--SQL Server的存储过程调用Com组件
    /*--下面的部分在VB中完成首先我们先用VB 作一个最简单的组件工程名称: testSQLCOM
    类名: TestMath'函数,计算两个整数相加的结果
    Public Function AddMe(a As Long, b As Long) As Long
       AddMe = a + b
    End Function编译生成后,我们就可以在 Sql Server 中对这个 Com 组件进行调用了
    --*//*--下面是SQL中对上面DLL的调用--*/--定义用到的变量
    declare @err int,@src varchar(255),@desc varchar(255)
    declare @obj int,@re int--创建调用实例
    exec @err=sp_OACreate 'testSQLCOM.TestMath', @obj out
    if @err<>0 goto lberr  --如果创建失败,则进行错误处理--调用DLL中的函数
    exec @err=sp_OAMethod @obj,'AddMe',@re out,100,200
    if @err<>0 goto lberr  --如果调用错误,则进行错误处理print '返回的结果是:' + str(@re)--完成后释放
    exec sp_OADestroy @objreturnlberr:
    exec sp_oageterrorinfo 0,@src out,@desc out
    select cast(@err as varbinary(4)) as 错误号
    ,@src as 错误源,@desc as 错误描述
      

  3.   

    还有一种直接dos下传送参数的办法,如
    exec master..xp_cmdshell 'winrar a xxx c:\xxx.txt'