sp_oacreate vbscript.regexpクラスは登録されていません
-
16-10-2019 - |
質問
Windows Server 2003 Enterprise X64エディションを想像してください。
VBScriptを使用して「vbscript.regexp」オブジェクトを作成できます(DLLが登録されていることを確認)。
SQL Server 2005 SP3(.4053)(クラスター)環境でSP_OACREATEを使用して「vbscript.regexp」オブジェクトを作成することはできません。
OLEオートメーションは、表面積構成でチェックされています。
SP_OACREATEはごく最近まで機能していました。
手伝って頂けますか?
*コード*
declare
@source varchar(5000),
@regexp varchar(1000),
@replace varchar(1000),
@globalReplace bit,
@ignoreCase bit
set @source = 'NBG76TF43'
set @regexp = '[^0-9]'
set @replace = ''
set @globalReplace = 1
set @ignoreCase = 1
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @result varchar(5000)
EXECUTE @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'A'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'B'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'C'
PRINT @hr
END
EXECUTE @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'D'
PRINT @hr
END
EXECUTE @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0
BEGIN
EXEC @hr = sp_OADestroy @objRegExp
PRINT 'E'
PRINT @hr
END
EXECUTE @hr = sp_OADestroy @objRegExp
IF @hr <> 0
BEGIN
PRINT 'F'
PRINT @hr
END
PRINT @result
/*
A
-2147211480
B
-2147211480
C
-2147211480
D
-2147211480
E
-2147211480
F
-2147211480
*/
解決
10か月後、同じシステムで問題が再び発生しました。
- 特定のエラー:0x8007045a(動的リンクライブラリ(DLL)初期化ルーチンが失敗しました)
この問題の原因が見つかりません。ただし、サーバーを再起動すると問題が解決することを示唆する十分な関連シナリオ(10か月前)が見つかりました。
サーバークラスター(両方のノード、制御されたフェールオーバー後)を再起動し、問題が解決しました(sp_oacreateを使用して「vbscript.regexp」オブジェクトを作成できます)。
所属していません dba.stackexchange