Active Directory Query 2 (ADSI)

Opgelet, dit wordt geopend in een nieuw venster. PDFAfdrukkenE-mail

AD is beperkt voor het verzenden van 1000 records in een batch. In een ADO interface kun je hier een batch grote voor definieren,
in OPENQUERY kan dit niet. Omdat deze beperking bestaat werken we ons maar een weg door het alfabet middels een "while" lus.

 

ALTER PROCEDURE [dbo].[SPName]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @cmdstr char(800)
DECLARE @eindstr Char(800)
DECLARE @nAsciiValue smallint
DECLARE @sChar char(1)
truncate table <TableName>
-- Begin Select 65 = 'a' t/m 'z'
SELECT @nAsciiValue = 65
WHILE @nAsciiValue < 91
BEGIN

SELECT @sChar= CHAR(@nAsciiValue)

set @cmdstr = 'SELECT * from openquery (ADSI,''select displayname,physicalDeliveryOfficeName,
initials,department,company,employeeID,homeDirectory,profilePath,distinguishedName,title,
sAMAccountName,givenName,telephoneNumber,
sn,mail,userAccountControl,homemta from
''''LDAP://server.domain.ad/DC=<domain>,DC=ad'''' WHERE objectclass=''''person'''' AND SAMAccountName = ''''%s*'''''')'
select @eindstr = dbo.fnSprintf(@cmdstr, @schar, default)
-- Vullen tabel
INSERT <tablename>
EXEC( @eindstr )
SELECT @nAsciiValue = @nAsciiValue + 1
END


De functie fnSprintf heb ik van internet gehaald en vervangt de standaardfunctie xp_sprintf die een beperking heeft van 255 karakters. De functie fnSprintf kan hier 8000 karakters verwerken.

 

--=========================================================================
-- Made by Ryan Randall @ http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=65584
-- Gebruiken van de Functie gaat op de volgende manier:
-- select dbo.fnSprintf('INSERT INTO %s VALUES (%s, %s)', 'table1,1,2', default)
-- Functie wordt aangeroepen vanuit de SP: [SP_Name]
--=========================================================================
ALTER function [dbo].[fnSprintf] (@s varchar(8000), @params varchar(8000), @separator char(1) = ',')
returns varchar(8000)
as
begin
declare @p varchar(8000)
set @params = @params + @separator
while not @params = ''
begin
set @p = left(@params+@separator, charindex(@separator, @params)-1)
set @s = STUFF(@s, charindex('%s', @s), 2, @p)
set @params = substring(@params, len(@p)+2, 8000)
end
return @s
end

Plaats reactie


Beveiligingscode
Vernieuwen

Laatst aangepast op Donderdag 23 September 2010 08:05
Geschreven door Bob Tossaint
Maandag 14 April 2008 10:15

Copyright © 2024 Bob Tossaint's website. Alle rechten voorbehouden.
Joomla! is vrije software vrijgegeven onder de GNU/GPL Licentie.
JoomlaWatch Stats 1.2.8b by Matej Koval




mooCow mooCow mooCow
mooCow