powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический OpenQuery в курсоре, выручайте
21 сообщений из 21, страница 1 из 1
Динамический OpenQuery в курсоре, выручайте
    #38433786
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT sAMAccountnamE, extensionAttribute7
  FROM OpenQuery(ADSI, '
SELECT sAMAccountname, extensionAttribute7
  FROM ''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''
 WHERE ObjectCategory=''Person'' AND
       MemberOf =''CN=YYY,OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru''')

(10 row(s) affected)



Как бы, как бы, как бы соорудить вот такое: (я понимаю, что так в лоб писать нельзя, но это для наглядности):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE C1 CURSOR FOR
 SELECT GROUP
   FROM dbo.ADGROUP

DECLARE C2 CURSOR FOR
 SELECT sAMAccountnamE, extensionAttribute7
   FROM OpenQuery(ADSI, 'SELECT sAMAccountname,extensionAttribute7
                           FROM ''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''
                          WHERE ObjectCategory = ''Person'' AND
                                MemberOf = ''CN='+@GROUP+',OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru''')

OPEN C1
 FETCH FROM C1 INTO @GROUP
 WHILE @@FETCH_STATUS = 0
  BEGIN
.............   



пробовал
@SQL='.............';

запутался где сколько надо кавычек
с этим LDAP// внутри ничего не получается
прошу помощи, братцы
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433798
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
путь примерно такой:

create table #tmp (.............

insert into #tmp
exec('SELECT sAMAccountname,extensionAttribute7
FROM ''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''
WHERE ObjectCategory = ''Person''
AND MemberOf = 'CN='+@GROUP+',OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru'''
) AT ADSI;


select * from #tmp
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433799
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С кавычками все равно вам придется разобраться :-)
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433801
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо! буду пробывать
с кявычками вроде разобрался
в шоке от их числа...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @SQL VARCHAR(500)

SET @SQL = 'SELECT sAMAccountnamE, extensionAttribute7 FROM OpenQuery(ADSI, ''
SELECT sAMAccountname, extensionAttribute7
  FROM ''''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''''
 WHERE ObjectCategory=''''Person'''' AND MemberOf =''''CN=YYY,OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru'''''')'

EXEC(@SQL)

(10 row(s) affected)
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433811
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам инструкцию подготовил с расчетом того, что вы вставлять будете в курсор (SELECT на выходе). Ваш вариант такого не предполагает (EXEC на выходе).
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433818
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziktuwЯ вам инструкцию подготовил с расчетом того, что вы вставлять будете в курсор (SELECT на выходе). Ваш вариант такого не предполагает (EXEC на выходе).

Да не, эт понятно
У Вас кстати, перед CN одна штука кавычки, а надо две
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433821
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интеерсно, а сразу в курсор это можно вставить:

Типа так:
Код: sql
1.
2.
3.
4.
5.
DECLARE C2 CURSOR FOR
exec('SELECT sAMAccountname,extensionAttribute7
FROM ''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''
WHERE ObjectCategory = ''Person'' 
AND MemberOf = ''CN=' + @GROUP + ',OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru''') AT ADSI;
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433834
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziktuwпуть примерно такой:

create table #tmp (.............

insert into #tmp
exec('SELECT sAMAccountname,extensionAttribute7
FROM ''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''
WHERE ObjectCategory = ''Person''
AND MemberOf = 'CN='+@GROUP+',OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru'''
) AT ADSI;

select * from #tmp
INSERT в таком виде не заработал

Msg 7411, Level 16, State 1, Line 9
Server 'ADSI' is not configured for RPC.
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433842
Assoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AssollINSERT в таком виде не заработал
Msg 7411, Level 16, State 1, Line 9
Server 'ADSI' is not configured for RPC.
А заработал так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO #TMP
   EXEC('SELECT sAMAccountnamE, extensionAttribute7
              FROM OpenQuery(ADSI, ''SELECT sAMAccountname, extensionAttribute7
                                       FROM ''''LDAP:// OU=COMMON,OU=_Users,DC=XXX,DC=ru''''
                                      WHERE ObjectCategory=''''Person'''' AND
                                            MemberOf =''''CN=' + @AD_GROUP + ',OU=Common,OU=Applications,OU=_Groups,DC=XXX,DC=ru'''''')')

(10 row(s) affected)



БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ :)
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #38433983
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AssollMsg 7411, Level 16, State 1, Line 9
Server 'ADSI' is not configured for RPC.

Это всего лишь нужно поставить галочку в настройках линкед-сервера ADSI
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Динамический OpenQuery в курсоре, выручайте
    #39836733
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильно ли я понял, что табличную функцию с параметрами для чтения ADSI мне создать не удастся?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
alter FUNCTION Get_group_members
(	
	@p_ldap     varchar(1000),
	@p_group_cn varchar(1000),
	@p_sam_name varchar(1000)
)
RETURNS TABLE 
AS
RETURN 
(
SELECT top 900 objectGUID, samaccountname, distinguishedName  
FROM OpenQuery (ADSI,
'
SELECT objectGUID, samaccountname, distinguishedName
FROM  ''' + @p_ldap + ''' 
where objectClass = ''user'' 
  and sAMAccountName = ''' + @p_sam_name + '*''
  and memberOf = ''' + @p_group_cn + '''  ')

)
GO

ругается на плюсы


Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64)
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836742
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

инлайн нет, табличную можно
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836744
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKandreymx,

инлайн нет, табличную можноможешь пальцем ткнуть в разницу, я с терминами не очень
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836745
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

это?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
-- ================================================
-- Template generated from Template Explorer using:
-- Create Multi-Statement Function (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> 
(
	-- Add the parameters for the function here
	<@param1, sysname, @p1> <data_type_for_param1, , int>, 
	<@param2, sysname, @p2> <data_type_for_param2, , char>
)
RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
	-- Add the column definitions for the TABLE variable here
	<Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
	<Column_2, sysname, c2> <Data_Type_For_Column2, , int>
)
AS
BEGIN
	-- Fill the table variable with the rows for your result set
	
	RETURN 
END
GO
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836747
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

да
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836758
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

спасиб
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836768
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то не получается обойти все эти ограничения

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
alter FUNCTION Get_group_members_tmp
(
	@p_ldap     varchar(1000),
	@p_group_cn varchar(1000),
	@p_sam_name varchar(1000)
)
RETURNS 
@Users TABLE (sam_name varchar(1000))
AS
BEGIN
    declare
        @v_sql_text nvarchar(4000) = 
    '
    SELECT objectGUID, samaccountname, distinguishedName
    FROM  ''' + @p_ldap + ''' 
    where objectClass = ''user'' 
      and sAMAccountName = ''' + @p_sam_name + '*''
      and memberOf = ''' + @p_group_cn + '''  ';    

    INSERT into @Users
    exec('SELECT samaccountname
    FROM OpenQuery (ADSI, ' + @v_sql_text + ')'
    )


	
	RETURN 
END
GO


сообщение: 443, уровень: 16, состояние: 14, процедура: Get_group_members_tmp, строка: 20 [строка начала пакета: 20]
Invalid use of a side-effecting operator 'INSERT EXEC' within a function.
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836792
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

недосмотрел, думаю такое не сложится
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836798
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxчто-то не получается обойти все эти ограниченияИ не получится.
CLR-функцию пишите.
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836807
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmandreymxчто-то не получается обойти все эти ограниченияИ не получится.
CLR-функцию пишите.пока процедуру написал
времянку заполняет
...
Рейтинг: 0 / 0
Динамический OpenQuery в курсоре, выручайте
    #39836836
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо было вытянуть в БД членов групп (список групп из справочника, щаз таких групп около 1000)
написал две процедуры, одна рекурсивная, другая читает собственно АД

прим1: 35 тыщ строк вытянуло во времянку (группа, юзер) за 52 сек
прим2: есть группы, в которых кол-во юзеров > 900
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический OpenQuery в курсоре, выручайте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]