SQL Server 2008 R2を自分のマシンにインストールしました(自分のマシンはWindows Server 2003を実行しています)データベース内のいくつかのテーブルがトリガーを起動しています(挿入、削除、更新が発生した場合)トリガー結果は何らかのプロセス(triggersReceiver.exe)に到達するはずですトリガーを待機する共有メモリ経由)。問題は、SQL Server 2008 r2が、トリガーが起動したときに発生するエラー、triggersReceiver.exeが実行されていないこのプロセスを認識しないことです。しかし、彼は走っています!!!!! 以前に同様の問題に直面した人はいますか?
これは、トリガーが起動されるたびに実行される「コネクタdll」のコードです(このコードは拡張ストアドプロシージャを介して実行されます)。すべての機能はwinbase.h(windows dll)にあります。
////////Defenitions///////////////////////////////////////////////////////
#define XP_TRIGGER_SHARED_MEMEORY L"Global\\xp_trigger_shared_memory"
#define XP_TRIGGER_PROCESS_EVENT L"Global\\xp_trigger_process_event"
#define XP_TRIGGER_DONE_EVENT L"Global\\xp_trigger_done_event"
////////////////////////////////////////////////////////////////////////////
この関数はFALSEを返します(理由はわかりません...)
BOOL CTriggerGatewayConnector::Init()
{
::InitializeCriticalSection(&m_CS);
m_hMap = ::OpenFileMappingW(FILE_MAP_WRITE, FALSE, XP_TRIGGER_SHARED_MEMEORY);
if (m_hMap == NULL)
{
return FALSE;
}
m_pSqlTrigInfo = (SqlTriggerInfo*)::MapViewOfFile(
m_hMap, FILE_MAP_WRITE, 0, 0,sizeof (SqlTriggerInfo));
if (m_pSqlTrigInfo == NULL)
{
return FALSE;
}
m_hProcess = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_PROCESS_EVENT);
if (m_hProcess == NULL)
{
return FALSE;
}
m_hDone = ::CreateEventW(NULL, FALSE, FALSE, XP_TRIGGER_DONE_EVENT);
if (m_hDone == NULL)
{
return FALSE;
}
return TRUE;
}
Thnanks、リラン。