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。很遗憾你没有接受疫苗接种或戴口罩,因为我对你的设计还有其他问题。哦,你的家人很想你/