【发布时间】:2020-10-24 23:22:18
【问题描述】:
我有一个相当复杂(至少对我而言)的存储过程要编写,它需要处理来自前端的多个场景。
前端正在传递 2 个具有类似值的参数
@Levelmarker= (1234515-564546-65454,4654342-154658-56767,5465489-546549-65456)
这些是用逗号分隔的 GUID。
@`UserNameId= (5797823-65432143-65451213)
在前端输入此数据的用户的 GUID
值需要转到具有以下结构的表:
CREATE TABLE LevelTable
(
LevelId uniqueidentifier NOT NULL
LevelMarker uniqueidentiriet NOT NULL
UserName uniqueidentifier NOT NULL
);
我希望值像这样进入表格:
LevelId Levelmarker UserName
--------------------------------------------------------
NEWID() 1234515-564546-65454 5797823-654321-65451
NEWID() 4654342-154658-56767 5797823-654321-65451
NEWID() 5465489-546549-65456 5797823-654321-65451
这里是存储过程应该处理的场景。
-
一旦
levelmarkers被插入到表中,如果同一个用户回来并想要添加额外的Levelmarkers,前端将传递旧值和新值:(1234515-564546-65454,4654342-154658-56767,5465489-546549-65456,1332245-9852135-7841265)。我的存储过程应该识别出我已经在表中拥有前三个
Levelmarkers,并且应该只插入新的。 -
如果同一个用户决定删除之前的值,比如说两个值,前端会将值
(1234515-564546-65454,4654342-154658-56767)传递给我。存储过程应该识别出用户删除了两个值,应该从表中删除相同的值并保留未删除的值。 -
如果用户删除一些值并插入新值,则存储过程应识别要删除的值并插入新值。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
您最好使用表值参数传递单个 guid,而不是传递然后连接然后拆分它们。
标签: sql-server string stored-procedures sql-insert sql-delete