如何根据列值将值插入 table
How to insert values to table based on column value
我有一个叫做BranchServices
的table,它的结构如下,
FkBranchId FkServiceId SortValue
6 1 1
7 1 1
8 1 NULL
6 2 2
7 2 2
8 2 NULL
6 3 3
每个分支都有自己的排序顺序 (SortValue
)。有些分支没有排序顺序,那个分支 SortValue
是 NULL
。当我创建新服务时,我通过交叉连接向此 table 插入值,如下所示,
INSERT INTO BranchServices
SELECT b.BranchId,
s.ServiceID,
NULL
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1
但我需要更改上面的查询。在向每个分支插入新创建的服务 ID 时,我需要检查其当前排序顺序。如果该分支包含 SortValue = NULL
那么我需要插入 SortValue
作为 Null
null 如果该分支已经有排序顺序需要插入 0
到 sortValue
如何在插入新创建的服务之前检查分支是否有排序顺序。我可以在交叉连接中检查它吗?那又如何呢?
使用子查询为您插入的 FkBranchId
获取 SortValue
:
INSERT INTO BranchServices
SELECT b.BranchId,
s.ServiceID,
CASE WHEN(SELECT MIN(SortValue) FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1
我使用 MIN()
来确保子查询 return 只有 1 行(MAX()
也可以)。
我有一个叫做BranchServices
的table,它的结构如下,
FkBranchId FkServiceId SortValue
6 1 1
7 1 1
8 1 NULL
6 2 2
7 2 2
8 2 NULL
6 3 3
每个分支都有自己的排序顺序 (SortValue
)。有些分支没有排序顺序,那个分支 SortValue
是 NULL
。当我创建新服务时,我通过交叉连接向此 table 插入值,如下所示,
INSERT INTO BranchServices
SELECT b.BranchId,
s.ServiceID,
NULL
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1
但我需要更改上面的查询。在向每个分支插入新创建的服务 ID 时,我需要检查其当前排序顺序。如果该分支包含 SortValue = NULL
那么我需要插入 SortValue
作为 Null
null 如果该分支已经有排序顺序需要插入 0
到 sortValue
如何在插入新创建的服务之前检查分支是否有排序顺序。我可以在交叉连接中检查它吗?那又如何呢?
使用子查询为您插入的 FkBranchId
获取 SortValue
:
INSERT INTO BranchServices
SELECT b.BranchId,
s.ServiceID,
CASE WHEN(SELECT MIN(SortValue) FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1
我使用 MIN()
来确保子查询 return 只有 1 行(MAX()
也可以)。