Как правильно написать этот SQL для вставки? - PullRequest
0 голосов
/ 04 июня 2018

В моей БД есть таблица ADGroup, в которой есть столбцы Id, Guid.Столбец Guid представляет атрибут Guid внешних групп Active Directory.

В моей БД есть таблица ADGroupADGroup, в которой есть столбцы ParentADGroupId, ChildADGroupId.Эти столбцы представляют родительские / дочерние экземпляры столбца ADGroup.Id в таблице ADGroup.

У меня есть sproc, который использует параметр с табличным значением.TVP имеет столбцы ParentADGroupGuid и ChildADGroupGuid, оба с типом данных UNIQUEIDENTIFIER.Эти столбцы представляют родственные / дочерние отношения Group Guid в AD.

Я вставил данные ADGroup в свою БД, и теперь мне нужно вставить данные ADGroupADGroup, как показано ниже.Как правильно написать оператор выбора для вставки в разделе «/ * оператор выбора здесь * /» ниже?

CREATE PROCEDURE InsertADGroupGroups

    -- Add the parameters for the stored procedure here
    @ADGroupADGroupParameter ADGroupADGroupParameter READONLY
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO ADGroupADGroup
    (
        ParentADGroupId,
        ChildADGroupId
    )
    /* select statement here */

END

ОБНОВЛЕНИЕ

Вот некоторый пример SQL, который получит правильный ADGroup.Id для вставки для ParentADGroupGuid в TVP:

-- get ADGroup.Id for the AD Group Guid in the tvp
SELECT adg.Id 
FROM ADGroup adg
JOIN ADGroupADGroupParameter tvp ON tvp.ParentADGroupGuid = adg.Guid

Так что теперь мне нужно найти упрощенный способ обновления этого запроса, чтобы также включить ADGroup.Идентификатор для ChildADGroupGuid в TVP

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Я думаю, что следующий SQL может помочь:

INSERT INTO ADGroupADGroup
(
    ParentADGroupId,
    ChildADGroupId
)
SELECT adg1.Id, adg2.Id
FROM ADGroup adg1
JOIN @ADGroupADGroupParameter tvp ON tvp.ParentADGroupGuid = adg1.Guid
JOIN ADGroup adg2 ON tvp.ChildADGroupGuid = adg2.Guid

Тестирование сейчас ....

0 голосов
/ 04 июня 2018

Вы можете рассматривать параметр с табличным значением как обычную таблицу, поэтому будет работать базовый оператор выбора.

select ParentADGroupId,
    ChildADGroupId
from @ADGroupADGroupParameter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...