代码之家  ›  专栏  ›  技术社区  ›  HPWD

在哪里可以找到此存储过程所需的值?

  •  0
  • HPWD  · 技术社区  · 3 年前

    select @@Version 退货

    Microsoft SQL Server 2019 (RTM-CU11) (KB5003249) - 15.0.4138.2 (X64)   
    May 27 2021 17:34:14   
    Copyright (C) 2019 Microsoft Corporation 
    Express Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
    

    我在这里对一个应用程序进行逆向工程,原来的开发人员已经去世了(RIP)。

    我只是想在数据库中添加一个新用户。据我所知,系统执行一个存储过程 RS_GetIDValue 然后将其用于 UserID rsUser 表,而不是使用标识插入。我可能错了,但这就是我所看到的。

    存储过程希望将表名传递给它,但我不清楚它对其他参数的期望值。例如 @entity_id ,我从哪里获得该值?与相同 @NextID 或者是 NextID 存储过程将生成的输出?如果是,那么我会将该值用于新的 用户ID 当插入新用户时。

    USE [obscure_database_name]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[RS_GetIDValue]
        @table_nm varchar(75),
        @entity_id int,
        @NextID INT OUTPUT
    AS
    BEGIN
       SET @NextID = NULL
    
       IF @entity_id IS NOT NULL
       BEGIN
           SET @NextID = (SELECT id_num
                          FROM IDValue
                          WHERE table_nm = @table_nm
                            AND entity_id = @entity_id);
    
           UPDATE IDValue
           SET id_num = ISNULL(@NextID + 1, 1)
           WHERE table_nm = @table_nm
             AND entity_id = @entity_id;
        END
        ELSE
        BEGIN
            SET @NextID = (SELECT id_num
                           FROM IDValue
                           WHERE table_nm = @table_nm
                             AND entity_id IS NULL);
    
            UPDATE IDValue
            SET id_num = ISNULL(@NextID + 1, 1)
            WHERE table_nm = @table_nm
              AND entity_id IS NULL;
        END
    END
    GO
    

    我认为我需要执行

    EXEC RS_GetIDValue @table_nm = 'dbo.rsUser', @entity_id = XXXX, @NextID = YYYY;
    

    但我不知道存储过程的预期结果是什么 XXXX YYYY .

    有什么建议吗?

    更新 作为对一些评论的回应,我不知道最初的开发人员,在一个完美的世界里,会有评论和/或文档。我确信最初的开发人员认为他会抽出时间创建文档,并没有想到他会死于新冠肺炎,但我跑题了。

    目前,这是一个非常古老的桌面应用程序,我们正在尝试确定是否可以复制它,使其基于网络(云)。我们正在努力确保我们完全理解当前代码的作用。这种创建ID的方法对我来说很奇怪,我以前从未见过,但我还是跑题了。如果我们进行重构,将使用插入标识。我讨厌处理触发器并查找这样的表。我知道它们是有目的的,但对于我构建的那种web应用程序,身份插入是可以的/肥皂盒

    最终更新 更深入地了解,这个rsUser表不依赖于这个SP,我们在源代码的其他地方发现了一个if/then情况,在该情况下添加新用户是不同的,并且 那个 SP实际上是有道理的。

    感谢大家的帮助。我们都认为我们在这里做得很疯狂,但事实证明,我们让这件事变得比实际困难得多。

    去德文郡,RIP。很遗憾你没有接受疫苗接种或戴口罩,因为我对你的设计还有其他问题。哦,你的家人很想你/

    0 回复  |  直到 3 年前