在存储过程中突然失败的T-SQL查询失败

时间:2013-08-22 19:19:53

标签: sql sql-server tsql stored-procedures sql-server-2008-r2

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

我创建了一个查询,它基本上将一些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:/'.

当查询在存储过程外部自行运行时,不会抛出此错误。放入存储过程并执行时,会反复显示上述错误。

我很想知道导致这些错误的原因以及解决方法。

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

2 个答案:

答案 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, ...);
相关问题