|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。工具
在SQLSERVER中创立OLE工具实例,偶然我们想到数据库中实行存储历程的时分,同时挪用体系中的COM工具。此时我们能够接纳SQL的体系存储历程sp_OACreate,此存储历程的挪用要有必定的权限,只要sysadmin流动服务器脚色的成员才干实行sp_OACreate。
语法
sp_OACreateprogid,|clsid,
objecttokenOUTPUT
[,context]
参数
progid
是要创立的OLE工具的程序标识符(ProgID)。此字符串形貌该OLE工具的类,其情势以下:
OLEComponent.Object
OLEComponent是OLE主动化服务器的组件称号,Object是OLE工具名。指定的OLE工具必需无效而且必需撑持IDispatch接口。
比方,SQLDMO.SQLServer是SQL-DMOSQLServer工具的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-DMOSQLServer工具的CLSID。
objecttokenOUTPUT
是前往的工具令牌,而且必需是数据范例为int的部分变量。该工具令牌用于标识所创立的OLE工具,并将在挪用别的OLE主动化存储历程时利用。
context
指定新创立的OLE工具要在个中运转的实行高低文。假如指定,那末此值必需为以下值之一:
1=仅为历程内(.dll)OLE服务器
4=仅为当地(.exe)OLE服务器
5=历程内OLE服务器和当地OLE服务器都可
假如未指定,其默许值为5。此值将在挪用CoCreateInstance时作为dwClsContext参数传送。
若同意利用历程内OLE服务器(经由过程利用高低文值1或5大概不指定高低文值),该服务器将能够会见SQLServer具有的内存和别的资本。历程内OLE服务器大概会损坏SQLServer的内存或资本并招致不成预知的了局,如SQLServer会见背规。
当高低文值指定为4时,当地OLE服务器不克不及会见任何SQLServer资本,因此不克不及损坏SQLServer的内存或资本。
申明此存储历程的参数按地位指定,而不是按称号指定。
前往代码值
0(乐成)或非零数字(失利),是由OLE主动化工具前往的HRESULT的整数值。
我们来看一下一个详细的示例,在此示例中我们将挪用一个本人写的COM组件,此组件的功效是供应读写序列号的功效。
CREATEPROCEDURE[dbo].[sp_MyCheckSN]
@ENCRYPTIONnvarchar(255)out,@typeintout
AS
DECLARE@objectint
DECLARE@hrint
DECLARE@propertyvarchar(255)
DECLARE@returnvarchar(255)
DECLARE@srcvarchar(255),@descvarchar(255)
--创立一个COM工具
EXEC@hr=sp_OACreateSecuritySN.CSecurity,@objectOUT
IF@hr0
BEGIN
set@ENCRYPTION=err
RETURN
END
--挪用办法
declare@aanvarchar(255)--终极前往的值
EXEC@hr=sp_OAMethod@object,GetDiskSN,@aaout
IF@hr0
BEGIN
set@ENCRYPTION=err
RETURN
END
else
begin
set@Type=8--指明注册读取体例
end
---------------------
if@aa=
begin
--再读一次
EXEC@hr=sp_OAMethod@object,GetSNByAPI,@aaout
if@hr0
begin
set@ENCRYPTION=err
RETURN
end
else
begin
set@Type=5--指明是哪一种体例读取注册号的
end
end
--烧毁此工具
EXEC@hr=sp_OADestroy@object
IF@hr0
BEGIN
set@ENCRYPTION=err
RETURN
END
set@ENCRYPTION=@aa
GO
为了避免用户修正存储历程的代码。我们能够将此存储历程举行加密处置。可是加密后的存储历程也大概被破译出来。
导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。 |
|