以下のコードは、カーソルをいくつかのグループに制限すると完全に機能します*。ただし、ドメイン全体に対して実行すると、AD で 1000 レコードの制限に遭遇します。このページングを取得する方法についてのアイデアはありますか?
*これは、1000 レコードの制限を下回る限られた数のレコードのみを返す必要があるためです。
CREATE TABLE #MemberOfGroups
(
groupName VARCHAR (400),
cn VARCHAR (400),
displayName VARCHAR (400)
);
SET NOCOUNT ON;
DECLARE @t AS VARCHAR (100),
@t2 AS VARCHAR (1000),
@ot AS VARCHAR (4000),
@tt AS VARCHAR (4000);
DECLARE gC CURSOR
FOR SELECT cn,
distinguishedName
FROM OPENQUERY (ADSI, 'SELECT cn, distinguishedName
FROM ''LDAP://DC=coal,DC=local''
WHERE objectCategory = ''group''');
OPEN gC;
FETCH NEXT FROM gC INTO @t, @t2;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ot = '''SELECT cn, displayName
FROM ''''LDAP://DC=coal,DC=local''''
WHERE objectCategory = ''''Person'''' AND objectClass = ''''user''''
AND memberOf=''''' + @t2 + '''''';
SET @tt = 'select ' + '''' + @t + '''' + ' As GroupName, cn, displayName from openquery(ADSI,' + @ot + ''') order by cn';
INSERT INTO #MemberOfGroups (groupName, cn, displayName)
EXECUTE (@tt);
--print @tt
FETCH NEXT FROM gC INTO @t, @t2;
END
CLOSE gC;
DEALLOCATE gC;