Abrufen >901 Zeilen aus einer SQL Server 2008-Verbindungsserver Active Directory
In SQL Server 2008 (version 10.0.4000) habe ich einen verknüpften server zu einem Active Directory-server.
Diese Abfrage:
select TOP 901 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
funktioniert.
Jedoch die änderung der Abfrage und beim abrufen 902 Zeilen nicht :
select TOP 902 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
Der Fehler ist:
Msg 7330, Ebene 16, Status 2, Zeile 1
Kann nicht Holen Sie sich eine Reihe von OLE DB
provider "ADSDSOObject" verknüpft
server "adsisca".
Habe ich gefunden, die anderen Instanzen von Menschen, die diskutieren das gleiche problem in Foren, und Sie nie repariert, nur gearbeitet, um es schreiben mehrere Ansichten und union ' Ing Sie zusammen zum Beispiel.
Gibt es eine elegantere Lösung, ist es eine Einstellung, die ich ändern kann, irgendwo zum abrufen von mehr als 901 Zeilen?
InformationsquelleAutor bgs264 | 2011-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Union verwendet, zum Zwecke der Umgehung der Begrenzung ..
wie diese :
InformationsquelleAutor Magnus Reuter
Ich weiß, dies ist eine alte post, aber auch ich hatte die gleichen Probleme, und untersucht die vorgeschlagene Lösung oben. (Im Grunde mit einer Reihe von kleineren wählt mit einer sich verändernden Kriterien zu halten, die Zeile nach unten gezählt), Schnitt ich einfach eine etwas andere version davon, und vereint Sie alle in einer Db Anzeigen. Ich konnte nicht gestört werden MaxPageSize Sache - es sieht zu viel Aufwand.
InformationsquelleAutor Ross Oliver
Das problem
Die Lösung
Ich löste das gleiche problem bei mir, ohne dass ich eine Active Directory-Einstellung ändert (und ich bin erfolgreich abrufen können, um 50k Anmeldungen aus den AD-und es fehlt nicht zu Holen, mit einem einzigen login-Konto aus der AD-Domäne):
Müssen Sie arbeiten, um die ADSI-query-Einschränkung, indem die Schleife durch das Zeichen der Attribute. Finden Sie hier eine Lösung: http://www.sqlservercentral.com/Forums/Topic231658-54-1.aspx#bm1249991
Den Fehler wurde behoben, durch das schreiben
SELECT TOP 901 ...
STATT NURSELECT
.Dieses problem trat bei mir nach der migration der Datenbank von 2005 bis 2008, da in SQL Server 2008 gibt es ein limit von 901 Zeilen, die war 1000 in SQL Server 2005 (der Unterschied ist, dass wir schreiben müssen, wählen Sie TOP-901, das war nicht nötig in die SQL Server 2005, sonst wird das Programm nicht mit Fehler)
InformationsquelleAutor Mazhar Ehsan
Ich wusste nicht, wie den Geruch der anderen Optionen hier gepostet, dass viel, da Sie mit einer großen Domäne, es ist sehr möglich, mehr als 901 Konten beginnen mit dem gleichen ersten Buchstaben - besonders, wenn Sie suchen nach computer-accounts, die wahrscheinlich Folgen einige systematische Namensgebung mit dem gleichen ersten Buchstaben...
Hab ich etwas herumgespielt, und ich fand, dass, wenn Sie um die openquery von uSNCreated und legte eine TOP-901-Klausel in der äußeren Abfrage nicht es sprengen.
So, hier ist meine SQL-die holt sich ALLE active directory-Objekte (Computer, domain Controller, Benutzer und Kontakte) in eine temp-Tabelle in Blöcken von 901 Datensätze und gibt Ihnen einige nützliche Informationen über jedes Objekt.
uSNCreated
nicht eindeutig sein kann. Wäre es möglich, partitionieren Sie das Ergebnis mitobjectGUID
statt?InformationsquelleAutor John Sinclair
Müssen Sie ändern die MaxPageSize-Einstellung in Active Directory. Zu tun, dass Sie verwenden müssen Ntdsutil.exe die Sie können geben Sie auf den Befehl "ausführen", dann Folgen Sie diese Schritte
LDAP policies
, und drücken Sie dann die EINGABETASTE.Set MaxPageSize to 2000
. -> Oder eine beliebige Anzahl Sie wollenShow Values
Commit Changes
q
InformationsquelleAutor Raymund
Ich ändern müssen die MaxTempTableSize-Einstellung in Active Directory. Zu tun, dass Sie verwenden müssen Ntdsutil.exe die Sie können geben Sie auf den Befehl "ausführen", dann Folgen Sie diese Schritte
InformationsquelleAutor Edison Troncoso
Diese version der Lösung beschäftigt sich mit Situationen, in denen die Anzahl der Benutzer, beginnend mit dem angegebenen Zeichen ist immer noch > 901. Es verwendet eine master aufrufenden Prozedur eine andere gespeicherte Prozedur.
InformationsquelleAutor Tailspinner
Ich, wie die Vereinigung option ist die beste und einfach.
wählen Sie TOP-901 *
von openquery(adsisca,'
select givenName,
sn,
"sAMAccountName"
von "LDAP://10.1.2.3:389"
wo objectCategory = "Person"
und
objectClass = "InetOrgPerson"
und
"sAMAccountName" < "m"
')
union
wählen Sie TOP-901 *
von openquery(adsisca,'
select givenName,
sn,
"sAMAccountName"
von "LDAP://10.1.2.3:389"
wo objectCategory = "Person"
und
objectClass = "InetOrgPerson"
und
sAMAccountName >= "m"
')
InformationsquelleAutor user6232480
Ich schätzte John Sinclair Antwort so viel, ich habe beschlossen, auf die höchste form der Schmeichelei - imitation. Hier ist meine Interpretation von seiner Lösung. Stattdessen deklarieren Sie die ADSI-LDAP-Verbindung mit jeder Abfrage in der OpenRowSet, ich habe entschieden für die OpenQuery-Methode:
Es stellt sich heraus, John ' s Lösung war falsch in einer Hinsicht - uSNCreated von AD ist ein INT64-Wert, so erfordert SQL 'BIGINT' - Datentyp. Mein code wurde korrigiert, aktualisiert und mit mehr Kommentaren und debug-Optionen
InformationsquelleAutor Barnabya