-- 调用返回值的方法。 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
--如果是接口处理比较复杂,可以自己先写成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 错误描述
还有一种直接dos下传送参数的办法,如 exec master..xp_cmdshell 'winrar a xxx c:\xxx.txt'
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
/*--下面的部分在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 错误描述
exec master..xp_cmdshell 'winrar a xxx c:\xxx.txt'