質問

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」オブジェクトを作成できます)。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top