Thank you for showing interest. Please find the code for spQueryAd.The tables referenced are to be created in line with your requirement.
CREATE PROCEDURE [dbo].[Spqueryad] (@LDAPQuery VARCHAR(255)='',
@Verbose BIT=0)
AS
/*
DECLARE @RC int
DECLARE @LDAPQuery varchar(255)
DECLARE @Verbose bit
-- TODO: Set parameter values here.
SET @LDAP_Query = 'SELECT samAccountName FROM ''LDAP://DC=DOMAIN,DC=ORG'' WHERE objectCategory=''person'' and objectclass=''user'''
SET @Verbose = 1
EXECUTE @RC = dbo.spQueryAD
@LDAP_Query
,@Verbose
GO
*/
--declare variables
DECLARE @ADOconn INT ,
@ADOcomm INT ,
@ADOcommprop INT ,
@ADOcommpropVal INT ,
@ADOrs INT ,
@OLEreturn INT ,
@src VARCHAR(255) ,
@desc VARCHAR(255) ,
@PageSize INT ,
@StatusStr CHAR(255)
-- variable for current status message for verbose output
SET @PageSize = 1000 -- IF not SET LDAP query will return max of 1000 rows
--Create the ADO connection object
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Create ADO connection...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oacreate
'ADODB.Connection',
@ADOconn OUT
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOconn,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--SET the provider property to ADsDSOObject to point to Active Directory
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Set ADO connection to use Active Directory driver...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oasetproperty
@ADOconn,
'Provider',
'ADsDSOObject'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOconn,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Open the ADO connection
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Open the ADO connection...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oamethod
@ADOconn,
'Open'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOconn,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Create the ADO command object
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Create ADO command object...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oacreate
'ADODB.Command',
@ADOcomm OUT
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcomm,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--SET the ADO command object to use the connection object created first
IF @Verbose = 1
BEGIN
SET @StatusStr =
'Set ADO command object to use Active Directory connection...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oasetproperty
@ADOcomm,
'ActiveConnection',
'Provider=''ADsDSOObject'''
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcomm,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Get a pointer to the properties SET of the ADO Command Object
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Retrieve ADO command properties...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oagetproperty
@ADOcomm,
'Properties',
@ADOcommprop OUT
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcomm,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--SET the PageSize property
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Set ''PageSize'' property...'
PRINT @StatusStr
END
IF ( @PageSize IS NOT NULL ) -- If PageSize is SET then SET the value
BEGIN
EXEC @OLEreturn = Sp_oamethod
@ADOcommprop,
'Item',
@ADOcommpropVal OUT,
'Page Size'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommprop,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
EXEC @OLEreturn = Sp_oasetproperty
@ADOcommpropVal,
'Value',
'1000'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommpropVal,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--SET the SearchScope property to ADSSCOPESUBTREE to search the entire subtree
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Set ''SearchScope'' property...'
PRINT @StatusStr
END
BEGIN
EXEC @OLEreturn = Sp_oamethod
@ADOcommprop,
'Item',
@ADOcommpropVal OUT,
'SearchScope'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommprop,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
EXEC @OLEreturn = Sp_oasetproperty
@ADOcommpropVal,
'Value',
'2' --ADS_SCOPE_SUBTREE
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommpropVal,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--SET the Asynchronous property to True
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Set ''Asynchronous'' property...'
PRINT @StatusStr
END
BEGIN
EXEC @OLEreturn = Sp_oamethod
@ADOcommprop,
'Item',
@ADOcommpropVal OUT,
'Asynchronous'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommprop,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
EXEC @OLEreturn = Sp_oasetproperty
@ADOcommpropVal,
'Value',
true
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcommpropVal,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Create the ADO Recordset to hold the results of the LDAP query
IF @Verbose = 1
BEGIN
SET @StatusStr =
'Create the temporary ADO recordset for query output...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oacreate
'ADODB.RecordSET',
@ADOrs OUT
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOrs,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Pass the LDAP query to the ADO command object
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Input the LDAP query...'
PRINT @StatusStr
END
EXEC @OLEreturn = Spoasetproperty
@ADOcomm,
'CommandText',
@LDAPQuery
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcomm,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Run the LDAP query and output the results to the ADO Recordset
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Execute the LDAP query...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oamethod
@ADOcomm,
'Execute',
@ADOrs OUT
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOcomm,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'
--Return the rows found
IF @Verbose = 1
BEGIN
SET @StatusStr = 'Retrieve the LDAP query results...'
PRINT @StatusStr
END
EXEC @OLEreturn = Sp_oagetproperty
@ADOrs,
'getrows'
IF @OLEreturn <> 0
BEGIN -- Return OLE error
EXEC Sp_oageterrorinfo
@ADOrs,
@src OUT,
@desc OUT
SELECT ERROR=CONVERT(VARBINARY(4), @OLEreturn),
SOURCE=@src,
DESCRIPTION=@desc
RETURN
END
EXEC @OLEreturn = spOADestroy @ADOconn
IF @OLEreturn <> 0
BEGIN
EXEC spOAGetErrorInfo @ADOconn
RETURN
END
IF @Verbose = 1
PRINT Space(Len(@StatusStr)) + 'done.'