Свазять поля из LDAP с SQL

AH-2

Добрый день!Есть запрос который возвращает список пользователей из базы данных.К этому списку хочеться добавить данные из ADselect * from openquery(ADSI,';(&(ObjectCategory=Personal)(Name=*));displayName,department;subtree')Проблема в том что тут можно только константу нельзя использовать переменую для запроса. А выборка всех получается больше 1000Может кто знает как решить данную проблему?
3 ответа

AH-2

select * from openquery(ADSI,';(&(ObjectCategory=Personal)(Name=а*));displayName,department;subtree')union allselect * from openquery(ADSI,';(&(ObjectCategory=Personal)(Name=b*));displayName,department;subtree')union allselect * from openquery(ADSI,';(&(ObjectCategory=Personal)(Name=c*));displayName,department;subtree')...


AH-2

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] (<b>256</b>) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[AccountName] [nvarchar] (<b>256</b>) COLLATE Cyrillic_General_CI_AS NOT NULL ,
			[SAMAccountName] [nvarchar] (<b>128</b>) 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(<b>4000</b>), @sql nvarchar(<b>4000</b>), @fqdn nvarchar(<b>128</b>)

	select @fqdn=str FROM dbo.[isa2006 Глобальные параметры] WHERE ID=<b>2</b>
	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(<b>256</b>)
	set @rc=<b>1</b>
	set @sql=REPLACE(@sql_template, N'<<replace>>', N'')
	while @rc><b>0</b> begin
		INSERT INTO dbo.[LDAP_SAMName_to_DisplayName] exec(@sql)
		set @rc=@@rowcount
		if @rc><b>0</b> begin
			select top <b>1</b> @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

RETURN


AH-2

Ну вообщем пути понятные, у обоих есть недостатки. Хочу попробывать сделать сборку которую можно выдать за функцию, то есть реализовать Openquery с параметром.Спасибо.