Sql server 从active directory获取说明
我正在使用sql server从active directory导入组和用户。我发现下面的代码可以拉组和用户Sql server 从active directory获取说明,sql-server,sql-server-2008,active-directory,Sql Server,Sql Server 2008,Active Directory,我正在使用sql server从active directory导入组和用户。我发现下面的代码可以拉组和用户 CREATE TABLE ##Groups ( CN VARCHAR(128), DN VARCHAR(1024), Email VARCHAR(128), ADSPath VARCHAR(1024)); CREATE TABLE ##Users ( DistributionGroup VARCHAR(128), FirstName VARCHAR(50), LastName VARCH
CREATE TABLE ##Groups ( CN VARCHAR(128), DN VARCHAR(1024), Email VARCHAR(128), ADSPath VARCHAR(1024));
CREATE TABLE ##Users ( DistributionGroup VARCHAR(128), FirstName VARCHAR(50), LastName VARCHAR(50), EmailAddress VARCHAR(128));
DECLARE @sql VARCHAR(1024)
SET @sql = 'INSERT INTO ##Groups (CN, DN, Email, ADSPath) SELECT CN, distinguishedName DN, mail Email, ADSPath FROM OpenQuery(ADSI, ''<LDAP://controller.domain.com:389/DC=domain,DC=com>;(&(objectClass=Group));cn, distinguishedName, mail, ADSPath;subtree'') ORDER BY distinguishedName';
EXEC(@sql);
DECLARE @CN VARCHAR(128)
DECLARE @DN VARCHAR(1024)
SELECT TOP 1 @CN = CN, @DN = DN FROM ##Groups
WHILE EXISTS(SELECT DN FROM ##Groups WHERE DN > @DN)
BEGIN
SET @sql = 'INSERT INTO ##Users (DistributionGroup, Firstname, LastName, EmailAddress) SELECT '''+@CN+''' [Distribution Group], ISNULL(givenName, '''') FirstName, ISNULL(sn, '''') LastName, mail EmailAddress FROM OpenQuery(ADSI, ''<LDAP://controller.domain.com:389/DC=domain,DC=com>;(&(objectClass=User)(memberOf='+@DN+'));givenName, sn, mail;subtree'')';
EXEC(@sql)
SELECT TOP 1 @CN = CN, @DN = DN FROM ##Groups WHERE DN > @DN
END
SELECT * FROM ##Groups;
SELECT * FROM ##Users;
DROP TABLE ##Groups;
DROP TABLE ##Users;
这很有效。现在,我想提取组的描述,但我似乎无法找到字段的名称。帮助?AD中组的说明存储在“说明”属性中 参考:
编辑:在SQL中使用ADSI链接服务器时,似乎无法实际提取description属性,因为它是一个多值属性。有关从AD提取数据以导入SQL server的另一种方法,请参阅。AD中组的说明存储在“说明”属性中 参考:
编辑:在SQL中使用ADSI链接服务器时,似乎无法实际提取description属性,因为它是一个多值属性。有关从AD提取数据以导入SQL server的替代方法,请参阅。ok。我向查询中添加了说明,并得到以下错误:Msg 7341,级别16,状态2,第1行无法获取列[ADSDSOObject]的当前行值。链接服务器ADSI的OLE DB提供程序ADSDSOObject中的说明。由于符号不匹配或溢出以外的原因,无法转换数据值。@DForck42:您可能无法通过受损的OLE DB提供程序获取数据值,因为描述可能是一个多值属性。不幸的是,我认为你对此无能为力……好吧。我向查询中添加了说明,并得到以下错误:Msg 7341,级别16,状态2,第1行无法获取列[ADSDSOObject]的当前行值。链接服务器ADSI的OLE DB提供程序ADSDSOObject中的说明。由于符号不匹配或溢出以外的原因,无法转换数据值。@DForck42:您可能无法通过受损的OLE DB提供程序获取数据值,因为描述可能是一个多值属性。不幸的是,我认为你对此无能为力。。。。