-1

免責事項:ご容赦ください。私は SQL/T-SQL と SQL Server に比較的慣れていないので、これが少し奇妙に見える場合は、それが理由です。

基本的に、一部の Active Directory ユーザー データを 2 つのテーブルと同期するクエリを作成しました。一時テーブルを作成することから始めます

CREATE TABLE #ADUsers ( ... )

次に、データは Active Directory から取得され、このブログ投稿にいくらか影響を受けたコードを使用して #ADUsers に挿入されます。この時点で、一時テーブルには非アクティブ/無効アカウントやサービス アカウントなどの不要なデータが多数あり、OPENQUERY ステートメント内からそれを削除するのに苦労していたため、SELECT を使用して結果をサニタイズしました ... WHERE 句を使用して不要なデータを削除し、結果を別の一時テーブルに格納する INTO ステートメント。最後のステップは、「マスター」テーブルを更新するためのマージ ステートメントです。

このクエリは、長くて面倒ですが、完璧に機能します。次のステップは、これをストアド プロシージャにし、データを最新の状態に保つためにストアド プロシージャと半定期的な間隔を実行する何らかのトリガーを作成することでした。

しかし、それをストアド プロシージャに変換して実行すると、閉じられていない引用符と不適切な構文に関するエラーが表示されます。

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

埋め込まれた文字列を 2 つの単一引用符で囲むだけでよいと思います。

'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 に答える