我创建了一个查询,它基本上将一些Active Directory用户数据与两个表同步。它首先创建一个临时表
CREATE TABLE #ADUsers ( ... )
然后从Active Directory中提取数据并使用受this blog post启发的代码插入到#ADUsers中。此时,临时表中有许多不必要的数据,包括非活动/禁用和服务帐户之类的东西,我在OPENQUERY语句中删除它时遇到了一些问题,因此使用SELECT清除了结果... INTO语句使用WHERE子句删除不必要的数据,然后将结果放入另一个临时表中。最后一步是合并语句,以更新“主”表。
这个查询虽然漫长而凌乱,却完美无缺!下一步是使这成为一个存储过程,并可能创建一个运行存储过程和半定期间隔的触发器,以使数据保持最新。
但是,当我将其转换为存储过程并执行时,它会显示有关未关闭的引号和错误语法的错误。
Msg 105, Level 15, State 1, Line 3
Unclosed quotation mark after the character string 'SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail, department, manager, OU, userAccountControl
FROM 'LDAP://DC=domain, DC=local'
WHERE objectCategory = 'Person'
'.
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail, department, manager, OU, userAccountControl
FROM 'LDAP:/'.
当查询在存储过程外部自行运行时,不会抛出此错误。放入存储过程并执行时,会反复显示上述错误。
我很想知道导致这些错误的原因以及解决方法。
提前感谢您的任何帮助和建议!
答案 0 :(得分:0)
它清楚地表明引号未正确关闭,加倍于LDAP周围的引号:// DC = domain,DC = local和Person:
SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail,
department, manager, OU, userAccountControl FROM ''LDAP://DC=domain, DC=local''
WHERE objectCategory = ''Person''
答案 1 :(得分:0)
我相信你只需要在嵌入字符串周围使用两个单引号。
'SELECT CN, givenName, SN, objectCategory, SAMAccountName, mail, department, manager, OU, userAccountControl
FROM ''LDAP://DC=domain, DC=local''
WHERE objectCategory = ''Person'' '
我猜这是在一个:
内运行SELECT * FROM OPENQUERY (ADSI, ...);