触发当SQL Server 2008 R2中无法识别过程
-
25-09-2019 - |
题
我已经安装了SQL Server 2008 R2在我的机器(我的机器上运行Windows Server 2003) 我的一些数据库中的表都fireing触发(当插入,删除,更新时) 其应该达到一些过程(triggersReceiver.exe经由共享存储器)触发结果等待触发器。 问题是,在SQL Server 2008 R2不承认这个过程中的错误,我得到当触发器触发: triggersReceiver.exe没有运行。 但他乳宁!!!!! 是任一面对??
前一个类似的问题这是,“连接器DLL”的部分执行的当过一个触发器被触发(通过扩展存储过程代码执行)的代码: 所有的功能是在WINBASE.H实测值(窗口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, 丽然
解决方案
在问题解决了! 它实际上是一个权限问题。 当触发器触发了它试图写入文件XP_TRIGGER_SHARED_MEMEORY 但是失败在这里: m_hMap = :: OpenFileMappingW(FILE_MAP_WRITE,FALSE,XP_TRIGGER_SHARED_MEMEORY); 如果(m_hMap == NULL) { 返回FALSE; } 触发实际激活已加载到SQL Server的dll,和SQL Server 没有任何权限(通过在其内部的dll teven)写入AHE碎片文件。
为了解决这个问题,你需要给SQL Server中permmisions: 右键点击我的电脑 - >管理 - >服务和应用程序 - >服务: 的的ForEach 强> SQL服务:(在右边的列表) 1.右键点击它 - >属性 - >登录选项卡 - >更改为本地系统帐户
希望这将有助于somtime ..