>我正在SSRS中创建一份报告,该报告返回一堆数据,我需要返回的列之一是来自Active Directory的值。我有一个查询,它获取一个值,我想将其传递到一个子查询中,该子查询在活动目录中查找一个值。
到目前为止,我所拥有的看起来像这样(简化(:
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='' +@UserID+ ''
') ) AS LoggedBy
FROM dbo.UserRecords WHERE UserID = 1
然而,问题是当我在子查询中使用@UserID时,输出别名"LoggedBy"总是返回"Null"。如果我取出参数并手动键入参数具有的值,它可以正常工作。
似乎我无法将@UserID参数从主查询获取到子查询中。 我们想知道,我在这里错过了什么?
你不能以这种方式将变量发送到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 t.extensionattribute5=@UserID ) AS LoggedBy
FROM dbo.UserRecords WHERE UserID = 1
来自 MSDN
OPENQUERY 不接受变量作为其参数。