SQL Server OpenQuery - 将参数结果从主 SELECT 查询传递到子查询



>我正在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 不接受变量作为其参数。

最新更新