【问题标题】:what is the proper way to write this sql for insert?为插入编写此 sql 的正确方法是什么?
【发布时间】:2023-04-02 23:16:01
【问题描述】:

我的数据库中有一个 ADGroup 表,其中包含 Id、Guid 列。 Guid 列表示外部 Active Directory 组的 Guid 属性。

我的数据库中有一个 ADGroupADGroup 表,其中包含 ParentADGroupId、ChildADGroupId 列。这些列表示 ADGroup 表中 ADGroup.Id 列的父/子实例。

我有一个使用表值参数的存储过程。 TVP 具有列 ParentADGroupGuid 和 ChildADGroupGuid,两者都具有 UNIQUEIDENTIFIER 数据类型。这些列代表 AD 中的父/子 Group Guid 关系。

我已将 ADGroup 数据插入到我的数据库中,现在我需要使用下面的 sproc 插入 ADGroupADGroup 数据。在下面的“/* select statement here */”部分中编写用于插入的 select 语句的正确方法是什么?:

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 以插入 TVP 中的 ParentADGroupGuid:

-- 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

所以现在我需要找出一种简化的方法来更新此查询,以便在 TVP 中也包含 ChildADGroupGuid 的 ADGroup.Id

【问题讨论】:

    标签: sql sql-server tsql stored-procedures


    【解决方案1】:

    您可以将表值参数视为常规表,这样基本的选择语句就可以工作。

    select ParentADGroupId,
        ChildADGroupId
    from @ADGroupADGroupParameter
    

    【讨论】:

    • 每个 TVP 列都是 ADGroup.Guid 列(不是 ADGroup.Id 列)的一个实例,因此需要一些连接。这不会像您发布的那样是一个简单的选择
    • 那么请分享一些细节,以便我们提供帮助。你的 TVP 定义是什么样的?
    • 我用一些示例 SQL 在我的原始帖子中添加了一个 UPDATE 部分
    【解决方案2】:

    我认为下面的 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
    

    正在测试中......

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2021-07-21
      相关资源
      最近更新 更多