Récupérer >901 lignes à partir de SQL Server 2008 serveur lié à Active Directory
Dans SQL Server 2008 (version 10.0.4000) j'ai créé un serveur lié à un serveur Active Directory.
Cette requête:
select TOP 901 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
œuvres.
Toutefois la modification de la requête et de tenter de récupérer 902 lignes n' :
select TOP 902 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
L'erreur est:
Msg 7330, Niveau 16, État 2, Ligne 1
Impossible de récupérer une ligne de OLE DB
fournisseur de "ADSDSOObject" qui y sont liées
le serveur "adsisca".
J'ai trouvé d'autres cas de personnes discutant le même problème sur les forums et ils n'ont jamais fixe, il suffit de travaillé autour de l'écriture de plusieurs points de vue et de l'union avec eux, ensemble, par exemple.
Est-il plus élégant fix, est-il un paramètre que je peux changer quelque part pour récupérer plus de 901 lignes?
OriginalL'auteur bgs264 | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
Utiliser de l'union pour contourner la limitation ..
comme ceci :
OriginalL'auteur Magnus Reuter
Je sais que c'est un vieux post, mais j'ai trop eu les mêmes problèmes, et a examiné la solution proposée ci-dessus. (En gros à l'aide d'un tas de petites sélectionne avec une évolution des critères de garder le nombre de lignes vers le bas) je viens de couper une version légèrement différente, et réunies dans un Db de Vue. Je ne pouvais pas être dérangé par qui MaxPageSize chose - il a l'air trop trop d'effort.
OriginalL'auteur Ross Oliver
Le problème
La solution
Je viens de résoudre le même problème pour moi, sans aller pour tout Active Directory changements de réglage (et je suis d'réussi à récupérer environ 50k connexions à partir de l'ANNONCE et il ne manque pas de récupérer un compte de connexion unique de l'ANNONCE de domaines):
Vous avez besoin pour travailler autour de l'ADSI requête limitation par boucle à travers les personnages des attributs. Voir une solution ici: http://www.sqlservercentral.com/Forums/Topic231658-54-1.aspx#bm1249991
L'erreur a été résolue par écrit
SELECT TOP 901 ...
À la PLACE DE JUSTESELECT
.Ce problème m'est apparu après la migration de la base de données à partir de 2005 à 2008, car, dans SQL Server 2008, il y a une limite de 901 lignes qui était de 1000 dans SQL Server 2005 (la différence c'est que nous devons écrire sélectionnez HAUT 901, qui n'était pas nécessaire dans SQL Server 2005, sinon le programme échoue avec l'erreur)
OriginalL'auteur Mazhar Ehsan
Je n'aimais pas l'odeur des autres options posté ici que beaucoup, parce qu'avec un grand domaine très possible d'avoir plus de 901 comptes commençant par la même lettre - en particulier si vous êtes à la recherche à des comptes d'ordinateur, ce qui risque de suivre quelques systématique de la convention d'affectation de noms à l'aide de la même première lettre...
J'ai fait de jouer autour et j'ai trouvé que si vous commandez le openquery par uSNCreated et de mettre un TOP 901 la clause where de la requête externe, il ne souffle pas.
Donc, voici mon SQL qui récupère TOUS les objets active directory (ordinateurs, contrôleurs de domaine, des contacts et des utilisateurs) dans une table temporaire dans des morceaux de 901 dossiers et vous donne quelques informations utiles sur chaque objet.
uSNCreated
peut ne pas être unique. Serait-il possible de partitionner le résultat avecobjectGUID
à la place?OriginalL'auteur John Sinclair
Vous avez besoin de changer la MaxPageSize configuration dans Active Directory. Pour cela, vous devez utiliser Ntdsutil.exe lequel vous pouvez taper sur la commande exécuter, puis suivez ces étapes
LDAP policies
, puis appuyez sur ENTRÉE.Set MaxPageSize to 2000
. -> Ou tout numéro que vous voulezShow Values
Commit Changes
q
OriginalL'auteur Raymund
J'ai besoin de changer la MaxTempTableSize configuration dans Active Directory. Pour cela, vous devez utiliser Ntdsutil.exe lequel vous pouvez taper sur la commande exécuter, puis suivez ces étapes
OriginalL'auteur Edison Troncoso
Cette version de la solution de traite des situations où le nombre d'utilisateurs commençant par le caractère spécifié est toujours > 901. Il utilise un maître de la procédure de l'appel d'une autre procédure stockée.
OriginalL'auteur Tailspinner
J'ai comme l'union de l'option est le meilleur et le plus simple.
sélectionnez HAUT 901 *
de openquery(adsisca,'
sélectionnez givenName,
sn,
sAMAccountName
de "LDAP://10.1.2.3:389"
où objectCategory = "Personne"
et
objectClass = "InetOrgPerson"
et
sAMAccountName < "m"
')
union
sélectionnez HAUT 901 *
de openquery(adsisca,'
sélectionnez givenName,
sn,
sAMAccountName
de "LDAP://10.1.2.3:389"
où objectCategory = "Personne"
et
objectClass = "InetOrgPerson"
et
sAMAccountName >= "m"
')
OriginalL'auteur user6232480
J'ai apprécié John Sinclair réponse tellement, j'ai décidé sur la plus haute forme de flatterie - imitation. Voici ma version de sa solution. Au lieu de déclarer l'ADSI connexion LDAP avec chaque requête dans la fonction OpenRowSet, j'ai opté pour la OpenQuery méthode:
Il s'avère que John solution avait tort sur un point - uSNCreated de AD est un INT64 valeur, exige une SQL 'BIGINT' type de données. Mon code a été corrigé et mis à jour avec plus de commentaires et d'options de débogage
OriginalL'auteur Barnabya