2014-12-10 2 views
2

Я создаю отчет в SSRS, который возвращает кучу данных, один из столбцов, которые мне нужно вернуть, является значением из Active Directory. У меня есть запрос, который получает значение, которое я хочу передать в подзапрос, который выглядит в Active Directory.SQL Server OpenQuery - Передача результата из основного запроса SELECT в подпроцесс

То, что я до сих пор выглядит примерно так (упрощенный):

DECLARE @UserID int 
SELECT @UserID = UserID FROM dbo.Users As TEST WHERE (RecordID = 123456) 

(SELECT displayName FROM OpenQuery (
ADSI, 
    'SELECT displayName 
    FROM ''LDAP://DC=company,DC=local'' 
    WHERE objectCategory=''user'' AND extensionattribute5='' [email protected]+ '' 
    ')) AS LoggedBy 

FROM dbo.UserRecords WHERE UserID = 1 

Проблема, однако, когда я использую @UserID в подзапроса выходной псевдоним «LoggedBy» всегда возвращает «Null». Если я выберу параметр и вручную наберу значение, которое имеет параметр, он отлично работает.

Похоже, что я не могу получить параметр @UserID из основного запроса в подзапрос. неужели интересно, чего мне здесь не хватает?

ответ

1

Вы не можете передавать переменные в контекст OpenQuery таким образом. Попробуйте отфильтровать запрос "вне":

DECLARE @UserID int 
SELECT @UserID = UserID FROM dbo.Users As TEST WHERE (RecordID = 123456) 

(SELECT t.displayName FROM OpenQuery (
ADSI, 
    'SELECT displayName, extensionattribute5 
    FROM ''LDAP://DC=company,DC=local'' 
    WHERE objectCategory=''user'' 
    ') as t 
WHERE [email protected]) AS LoggedBy 


FROM dbo.UserRecords WHERE UserID = 1 

От MSDN

OPENQUERY не принимает переменные для своих аргументов.

+0

А я не понял, что OPENQuery не будет поддерживать переменные - вот почему! Спасибо, что показал мне свет на это :) – Livewire