-1

免责声明:请耐心等待。我对 SQL/T-SQL 和 SQL Server 相对缺乏经验,所以如果这看起来有点奇怪,那就是原因。

我创建了一个查询,它基本上将一些 Active Directory 用户数据与两个表同步。它首先创建一个临时表

CREATE TABLE #ADUsers ( ... )

然后从 Active Directory 中提取数据,并使用受此博客文章启发的代码插入 #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:/'.

当查询在存储过程之外自行运行时,不会引发此错误。当放入存储过程并执行时,重复显示上述错误。

我很想知道是什么导致了这些错误以及如何解决这个问题。

提前感谢您的任何帮助和建议!

4

2 回答 2

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, ...);
于 2013-08-22T19:28:42.763 回答
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'' 
于 2013-08-22T19:27:31.387 回答