Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запросы к AD  [new]
bonzadk
Member

Откуда: Tallinn
Сообщений: 576
Вопрос - почему запрос к AD возвращает только 1000 записей, хотя их в реальности намного больше?
27 сен 05, 18:52    [1915731]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
Нужно изменить параметр MaxPageSize в AD с помощью ntdsutil.exe
http://support.microsoft.com/?kbid=315071
28 сен 05, 10:25    [1916883]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
bonzadk
Member

Откуда: Tallinn
Сообщений: 576
pr0ger
Нужно изменить параметр MaxPageSize в AD с помощью ntdsutil.exe
http://support.microsoft.com/?kbid=315071

Спасибо!
28 сен 05, 10:30    [1916900]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
pr0ger,
а можно это в самом запросе прописать как то??
10 авг 11, 13:47    [11097599]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
zbzbzbzbzb
pr0ger,
а можно это в самом запросе прописать как то??

Нет, это свойство AD, а не SQL Server.
10 авг 11, 13:49    [11097612]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
pr0ger
zbzbzbzbzb
pr0ger,
а можно это в самом запросе прописать как то??

Нет, это свойство AD, а не SQL Server.



В VisualStudio за это отвечает searcher.PageSize,
searcher.PageSize = 40000;
возможно и в SQL есть что то подобное.
10 авг 11, 14:36    [11098091]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
Glory
Member

Откуда:
Сообщений: 104751
zbzbzbzbzb
В VisualStudio за это отвечает searcher.PageSize,
searcher.PageSize = 40000;
возможно и в SQL есть что то подобное.

Сказали же - нет
10 авг 11, 14:38    [11098110]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
а как использовать переменную в запросе к АД

SELECT employeeID, mail, displayName
FROM OpenQuery
(ADSI,'SELECT employeeID, mail, displayName
FROM ''LDAP://DC=xxx,DC=yyy ''
where employeeID =''переменная @tabnum '' ')
10 авг 11, 14:57    [11098287]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
Glory
Member

Откуда:
Сообщений: 104751
Формируют _полный_ текст запроса в переменной и выполняют как динамический запрос
10 авг 11, 14:59    [11098305]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
в следующем запросе у меня выходит значение:
12343 | zzzz@mail.ru | Иванов Иван иваныч

SELECT employeeID, mail, displayName
FROM OpenQuery
(ADSI,'SELECT employeeID, mail, displayName
FROM ''LDAP://DC=xxx,DC=yyy ''
where employeeID =''12343'' ')

хочу чтобы у меня в цикле вместо 12343 подставлялось значение из переменной, что нужно писать в where employeeID =...............
10 авг 11, 15:14    [11098421]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
если можно то пример самый простой какой нибудь
10 авг 11, 15:16    [11098448]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
Glory
Member

Откуда:
Сообщений: 104751
declare @x varchar(8000)
set @x = 'select ...'+'=cccc '+'...'
exec(@x)
10 авг 11, 15:31    [11098590]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
Glory,
я сформировал запрос в переменную
в print все выводится, а здесь ругается что не хватает ковычек
в чем моя ошибка


declare @x varchar(8000)
declare @y varchar(50)
set @y='193982'
set @x = 'Select employeeID, mail, displayName FROM OpenQuery (ADSI,'''+
'SELECT employeeID, mail, displayName FROM ' +
'''''LDAP://OU = Центральный кампус , DC=xxx,DC=yyy ''''' +
'where employeeID = ''''' + @y + ''''')'
exec(@x)
11 авг 11, 07:51    [11101499]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
Все получилось!!! спасибо всем!
забыл про кавычку в самом конце. вот итоговый правильный код.

declare @x varchar(8000)
declare @y varchar(50)
set @y='193982'
set @x = 'Select employeeID, mail, displayName FROM OpenQuery (ADSI,'''+
'SELECT employeeID, mail, displayName FROM ' +
'''''LDAP://OU = Центральный кампус , DC=xxx,DC=yyy ''''' +
'where employeeID = ''''' + @y + ''''''')'
11 авг 11, 08:11    [11101518]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
kurikov_mv
Guest
1.declare @x varchar(8000)
set @x = 'Select employeeID, email..............'where employeeID = ''''' + @y + ''''''')'

exec (@X)
как полученные значения записать в переменную
мне надо например записать полученный из АД email в переменную

2.как можно вывести всех пользователей из АД в цикле не преодолевая барьер 901
11 авг 11, 09:45    [11101761]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
kurikov_mv
как можно вывести всех пользователей из АД

Так вроде вывели уже, почти 2000 лет назад.
11 авг 11, 12:15    [11102889]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
Glory
Member

Откуда:
Сообщений: 104751
kurikov_mv
1.declare @x varchar(8000)
set @x = 'Select employeeID, email..............'where employeeID = ''''' + @y + ''''''')'

exec (@X)
как полученные значения записать в переменную
мне надо например записать полученный из АД email в переменную

create table #x*(employeeID, email...)
insert #x exec(@x)

kurikov_mv
2.как можно вывести всех пользователей из АД в цикле не преодолевая барьер 901

выбирать по фильтру, который не превысит это число
11 авг 11, 12:19    [11102931]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
aleks2
Guest
kurikov_mv
2.как можно вывести всех пользователей из АД в цикле не преодолевая барьер 901


ALTER PROCEDURE LDAP_SAMName_to_DisplayName_CreateTable
-- обновление данных LDAP домена, чтобы отображать имена пользователей красиво.
AS
SET NOCOUNT ON 
SET XACT_ABORT ON

begin tran LDAP
	if OBJECT_ID('dbo.[LDAP_SAMName_to_DisplayName]') is not null 
		DELETE dbo.[LDAP_SAMName_to_DisplayName]
	else begin
		CREATE TABLE dbo.[LDAP_SAMName_to_DisplayName] (
			[DisplayName] [nvarchar] (256) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[AccountName] [nvarchar] (256) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[SAMAccountName] [nvarchar] (128) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			CONSTRAINT [PK_LDAP_SAMName_to_DisplayName] PRIMARY KEY  CLUSTERED ([AccountName]) 
		)	
		CREATE  UNIQUE  INDEX [IX_LDAP_SAMName_to_DisplayName] ON [dbo].[LDAP_SAMName_to_DisplayName]([SAMAccountName]) 
          end

	declare @sql_template nvarchar(4000), @sql nvarchar(4000), @fqdn nvarchar(128)

	select @fqdn=str FROM dbo.[isa2006 Глобальные параметры] WHERE ID=2
	if @fqdn is null  SET @fqdn=N''

-- как-то так "можно вывести всех пользователей из АД в цикле"
	set @sql_template='SELECT Name DisplayName, ''' +dbo.LDAP_DomainName()+'\'' + SAMAccountName [AccountName], SAMAccountName '
		+' FROM OPENQUERY(ADSI, ''select Name, sAMAccountName from ''''LDAP://'
		+dbo.[LDAP_FQDN->DCs](@fqdn)
		+''''' where objectClass = ''''User'''' and objectCategory=''''Person'''' <<replace>> ORDER BY SAMAccountName ASC '')'
	declare @rc int, @name nvarchar(256)
	set @rc=1
	set @sql=REPLACE(@sql_template, N'<<replace>>', N'')
	while @rc>0 begin
		INSERT INTO dbo.[LDAP_SAMName_to_DisplayName] exec(@sql)
		set @rc=@@rowcount
		if @rc>0 begin
			select top 1 @name = SAMAccountName FROM dbo.[LDAP_SAMName_to_DisplayName]  ORDER BY SAMAccountName DESC
			set @sql=REPLACE(@sql_template, N'<<replace>>', N' AND SAMAccountName>'''''+@name+''''' ')
		end
	end
commit tran LDAP

--	select * from dbo.[LDAP_SAMName_to_DisplayName]

	RETURN
11 авг 11, 13:00    [11103295]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к AD  [new]
zbzbzbzbzb
Guest
aleks2, что то как то все сложно... вот может кому пригодится

выбираем всех пользователей из АД минуя барьер 901
у меня довольно крупная организация и в АД более 30000 пользователей
поэтому делаю 3-и цикла чтоб 100% все запросы включали менее 900 записей.
использую символов в системе ASCII (set @A1 = CHAR(@J1) - здесь будет символ А) .

set @j1=65
set @j2=65
set @j3=65

create table #xx (employeeID nvarchar(256),mail nvarchar(256), displayName nvarchar(256))
WHILE @j1 < 90
BEGIN
set @A1 = CHAR(@J1) --первая буква
while @j2<90
begin
set @A2 = CHAR(@J2) --вторая буква
while @j3 < 90
begin
set @A3 = @A1 + @A2 + CHAR(@J3)+'*' --третья буква

set @x = 'Select employeeID, mail, displayName FROM OpenQuery (ADSI,'''+
'SELECT employeeID, mail, displayName FROM ' +
'''''LDAP://DC=xxx,DC=yyy ''''' +
'where mailNickname = ''''' +@A3+'''''
or extensionAttribute10 = ''''' +@A3+''''' '')'
insert #xx exec (@X)
set @j3 = @j3+1
end
set @j2 = @j2+1 set @j3 = 65
end
set @j1 = @j1+1 set @j2 = 65
END

во временной таблице все записи с пользователями из АД запросы к ней такие же как к обычным таблица
описал подробно.
всем спасибо кто помог разобраться
15 авг 11, 13:09    [11119524]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить