求教存储过程!!~~

sdzhangyan 2006-11-03 01:59:13
请问这个存储过程的作用是什么?看不懂!

create proc dbo.dt_addtosourcecontrol
@vchSourceSafeINI varchar(255) = '',
@vchProjectName varchar(255) ='',
@vchComment varchar(255) ='',
@vchLoginName varchar(255) ='',
@vchPassword varchar(255) =''

as

set nocount on

declare @iReturn int
declare @iObjectId int
select @iObjectId = 0

declare @iStreamObjectId int
select @iStreamObjectId = 0

declare @VSSGUID varchar(100)
select @VSSGUID = 'SQLVersionControl.VCS_SQL'

declare @vchDatabaseName varchar(255)
select @vchDatabaseName = db_name()

declare @iReturnValue int
select @iReturnValue = 0

declare @iPropertyObjectId int
declare @vchParentId varchar(255)

declare @iObjectCount int
select @iObjectCount = 0

exec @iReturn = master.dbo.sp_OACreate @VSSGUID, @iObjectId OUT
if @iReturn <> 0 GOTO E_OAError


/* Create Project in SS */
exec @iReturn = master.dbo.sp_OAMethod @iObjectId,
'AddProjectToSourceSafe',
NULL,
@vchSourceSafeINI,
@vchProjectName output,
@@SERVERNAME,
@vchDatabaseName,
@vchLoginName,
@vchPassword,
@vchComment


if @iReturn <> 0 GOTO E_OAError

/* Set Database Properties */

begin tran SetProperties

/* add high level object */

exec @iPropertyObjectId = dbo.dt_adduserobject_vcs 'VCSProjectID'

select @vchParentId = CONVERT(varchar(255),@iPropertyObjectId)

exec dbo.dt_setpropertybyid @iPropertyObjectId, 'VCSProjectID', @vchParentId , NULL
exec dbo.dt_setpropertybyid @iPropertyObjectId, 'VCSProject' , @vchProjectName , NULL
exec dbo.dt_setpropertybyid @iPropertyObjectId, 'VCSSourceSafeINI' , @vchSourceSafeINI , NULL
exec dbo.dt_setpropertybyid @iPropertyObjectId, 'VCSSQLServer', @@SERVERNAME, NULL
exec dbo.dt_setpropertybyid @iPropertyObjectId, 'VCSSQLDatabase', @vchDatabaseName, NULL

if @@error <> 0 GOTO E_General_Error

commit tran SetProperties

select @iObjectCount = 0;

CleanUp:
select @vchProjectName
select @iObjectCount
return

E_General_Error:
/* this is an all or nothing. No specific error messages */
goto CleanUp

E_OAError:
exec dbo.dt_displayoaerror @iObjectId, @iReturn
goto CleanUp



GO

其中关键的结果地方:
'SQLVersionControl.VCS_SQL'是什么东西?
sp_OAMethod 的调用传入这么多参数是什么意思啊?
...全文
317 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
to:fcuandy(手中无剑)

万分感谢~~~~~~~~~~~~~~~~~~~~~~

fcuandy 2006-11-03
  • 打赏
  • 举报
回复
vss sdk中居然没有文档..
fcuandy 2006-11-03
  • 打赏
  • 举报
回复
咨询了两位资深vc工程师都说没用过,我汗.
后来在google搜了一下英文文档大致了解到应该是一个关于版本控制的组件. 只是找不到具体详细的文档.我猜应该是vss sdk之类中的东西.
现在还在下载 vss sdk下下来看看有没有.
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
明天揭帖吧。等等看有没有人会更清楚一点点
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
这个东西没有人用过吗?
我还觉得应该很多人用过了呢!
冷箫轻笛 2006-11-03
  • 打赏
  • 举报
回复
应该是VSS有关的东西吧
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
应该不是自己定义的一个控件
我觉得是厂商提供的
fcuandy 2006-11-03
  • 打赏
  • 举报
回复
你的意思我明白,只是现在的要岐是, SQLVersionControl.VCS_SQL这东西是厂商提供的还是写代码的人自定义的一个控件. 我这样说应该说的很清楚了吧.
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
上面的代码整理一下:

Declare @Object int
Declare @RetVal int
Exec @RetVal=sp_OACreate 'Excel.Application',@Object OUTPUT
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
to:fcuandy(手中无剑)

关键是这个东西不是随便别人写的吧?应该是一个公用的东西

比如调用op_OACreate 的命令创建一个微软的Excel程序的实例:

Declare @Object intDeclare @RetVal intExec @RetVal=sp_OACreate 'Excel.Application',@Object OUTPUT

其中的'Excel.Application' 就是excel的ProgID

而这个似乎也应该是某个对象的ProgID吧?
fcuandy 2006-11-03
  • 打赏
  • 举报
回复
他能实现什么这谁知道.
我随手用vc写个组件,不提供接口说明和功能描述,你也不知道他是干什么用的
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
那是不是说这个存储过程实现的功能是通过SQLVersionControl.VCS_SQL创建一个某个东西的对象,那具体的这个什么东西就不知道了,但是他肯定能支持IDispatch接口

所以只要我知道了他到底是一个什么东西,就可以知道具体实现的功能了?
子陌红尘 2006-11-03
  • 打赏
  • 举报
回复
SQLVersionControl.VCS_SQL应该是一个class,包含在Visual Interdev组件的DLL文件中。
sdzhangyan 2006-11-03
  • 打赏
  • 举报
回复
多谢;libin_ftsafe(子陌红尘:当libin告别ftsafe)

这些都是联机帮助里的阿?

那那个存储过程到底是用来实现什么的呢?

或者,您能不能举一个小例子来说明?

'SQLVersionControl.VCS_SQL'到底是什么呢?

为什么要通过他来create呢?
子陌红尘 2006-11-03
  • 打赏
  • 举报
回复
sp_OAMethod
调用 OLE 对象的方法。

语法
sp_OAMethod objecttoken,
methodname
[, returnvalue OUTPUT]
[ , [ @parametername = ] parameter [ OUTPUT ]
[...n]]

参数
objecttoken

是先前用 sp_OACreate 创建的 OLE 对象令牌。

methodname

是要调用的 OLE 对象的方法名。

returnvalue OUTPUT

是该 OLE 对象的方法的返回值。如果指定,那么它必须是适当数据类型的局部变量。

如果方法返回单个值,那么或者为 returnvalue 指定一个局部变量,以便在该局部变量中返回方法的返回值,或者不指定 returnvalue,以单列、单行结果集的形式将方法返回值返回给客户端。

如果方法返回值是 OLE 对象,那么 returnvalue 必须是数据类型为 int 的局部变量。对象令牌将保存在该局部变量中,并且可由其它 OLE 自动化存储过程使用。

当方法返回值是数组时,如果指定了 returnvalue,那么该值将被设置为 NULL。

在下列情况下会出现错误:

指定了 returnvalue,但是方法并不返回值。


方法返回二维以上的数组。


方法以输出参数的形式返回数组。
[@parametername =] parameter [OUTPUT]

是方法参数。如果指定,那么 parameter 必须是适当数据类型的值。

若要获取输出参数的返回值,parameter 必须是适当数据类型的局部变量,并且必须指定 OUTPUT。如果指定的是常量参数,或未指定 OUTPUT,那么输出参数的任何返回值均被忽略。

如果指定,则 parametername 必须是 Microsoft® Visual Basic® 命名参数的名称。要注意 @parametername 不并是 Transact-SQL 局部变量。将去掉符号 (@),并将 parametername 作为参数名传递给 OLE 对象。指定所有位置参数后才能指定命名参数。

n

是表示可以指定多个参数的占位符。



说明 @parametername 可以是命名参数,因为它是指定方法的一部分,并将直接传递给对象。此存储过程的其它参数是按位置指定的,而不是按名称。


返回代码值
0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
子陌红尘 2006-11-03
  • 打赏
  • 举报
回复
sp_OACreate
在 Microsoft SQL Server 实例上创建 OLE 对象实例。

语法
sp_OACreate progid, | clsid,
objecttoken OUTPUT
[ , context ]

参数
progid

是要创建的 OLE 对象的程序标识符 (ProgID)。此字符串描述该 OLE 对象的类,其形式如下:

'OLEComponent.Object'

OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象名。指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。

例如,SQLDMO.SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。SQL-DMO 的组件名称为 SQLDMO,SQLServer 对象是有效的,并且同所有 SQL-DMO 对象一样,SQLServer 对象支持 Idispatch。

clsid

是要创建的 OLE 对象的类标识符 (CLSID)。此字符串描述该 OLE 对象的类,其形式如下:

'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'

指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。

例如,{00026BA1-0000-0000-C000-000000000046} 是 SQL-DMO SQLServer 对象的 CLSID。

objecttoken OUTPUT

是返回的对象令牌,并且必须是数据类型为 int 的局部变量。该对象令牌用于标识所创建的 OLE 对象,并将在调用其它 OLE 自动化存储过程时使用。

context

指定新创建的 OLE 对象要在其中运行的执行上下文。如果指定,那么此值必须为下列值之一:

1 = 仅为进程内 (.dll) OLE 服务器
4 = 仅为本地 (.exe) OLE 服务器
5 = 进程内 OLE 服务器和本地 OLE 服务器均可

如果未指定,其默认值为 5。此值将在调用 CoCreateInstance 时作为 dwClsContext 参数传递。

若允许使用进程内 OLE 服务器(通过使用上下文值 1 或 5 或者不指定上下文值),该服务器将可以访问 SQL Server 拥有的内存和其它资源。进程内 OLE 服务器可能会破坏 SQL Server 的内存或资源并导致不可预知的结果,如 SQL Server 访问违规。

当上下文值指定为 4 时,本地 OLE 服务器不能访问任何 SQL Server 资源,因而不能破坏 SQL Server 的内存或资源。



说明 此存储过程的参数按位置指定,而不是按名称指定。


返回代码值
0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧