我在 C# 应用程序的 sql server 数据库中有这两个表。
----------------------------
table_Items
----------------------------
Item1 | Item2| Item3 | Item4
A | B | C | D
E | F | G | Null
H | I | Null | Null
J | Null | Null | Null
------------------
table_Item_Shelves
------------------
Item_Name | Item_ID
A | Null
B | Null
C | Null
D | Null
E | Null
这是我需要做的。对于 table_items 中的每一行,首先检查行是否在所有(项目 1、2、3、4)或三个字段中都有值,而不是在 table_Item_Shelves 中为 Item_ID 字段中的每个项目插入“1”。对于下一行进行相同的检查并从 Item_ID 字段中获取最大值并增加 1。我还需要检查最多四个 Item_ID 是否相同。C# 和 SQL 的任何帮助都会很棒。谢谢。
如果 table_Item_Shelves 列 Item_ID 已经有一个值,我不应该插入新的 ID table_Item_Shelves 已经包含记录,我需要根据这些记录进行更新。
CREATE PROCEDURE UpdateItemIDs AS BEGIN SELECT ROW_NUMBER() OVER (ORDER BY Item1) AS RowIndex , IT.* , 0 AS 处理 INTO #TempTable FROM dbo。table_items IT WHERE(Item1 不为空且 Item2 不为空且 item3 不为空)或(Item1 不为空且 Item2 不为空且 item4 不为空)或(Item1 不为空且 Item3 不为空且 item4 为不为空)或(第 2 项不为空且第 3 项不为空且第 4 项不为空)
DECLARE @ITEM1 VARCHAR(50)
DECLARE @ITEM2 VARCHAR(50)
DECLARE @ITEM3 VARCHAR(50)
DECLARE @ITEM4 VARCHAR(50)
DECLARE @RowIndex INT
DECLARE @NewItemID INT
WHILE ( SELECT COUNT(*)
FROM #TempTable
WHERE processed = 0
) > 0
BEGIN
SELECT TOP 1
@ITEM1 = Item1 ,
@ITEM2 = Item2 ,
@ITEM3 = item3 ,
@ITEM4 = Item4 ,
@RowIndex = RowIndex
FROM #TempTable
WHERE processed = 0
UPDATE #TempTable
SET processed = 1
WHERE RowIndex = @RowIndex
SET @NewItemID = ( SELECT ISNULL(MAX(Item_ID), 0) + 1
FROM dbo.table_items_shelves
) ;
UPDATE dbo.table_items_shelves
SET Item_ID = @NewItemID
WHERE Item_Name IN ( @ITEM1, @ITEM2, @ITEM3, @ITEM4 )
AND Item_ID IS NULL
END
END
我有上面的存储过程,它可以工作(在某人的帮助下),但我需要修改它以使用 table_items(Item1,Item2 .....Item8)中的 8 列,并检查行是否有所有值( item1, item2....item8) 或 5 个字段,而不是在 table_Item_Shelves 中为 Item_ID 字段中的每个项目插入“1”。对于 table_items(Item1,Item2 .....Item8) 中的 8 列
able_Items
-----------------------------------------------------------------------
Item1 | Item2 | Item3 | Item4 | Item5 | Item6 | Item7 | Item8 |
------------------------------------------------------------------------
Pencils | Rubbers | Books | DvDs | Glue |Stapler| CDs |Mouse |
Marker |KeyChain |Clipboards |Pens |Bucket| Null |
Monitors| Null |
Glue | Null |Null | Null | Null | Null | Null | Null | Null |
Papers| Null | Null | Null
table_Item_Shelves
------------------
Item_Name | Item_ID
-------------------
Pencils | Null
Rubbers | Null
Pens | Null
Books | Null
Staplers | Null
Glue | Null
Buckets | Null
Keyborads | Null
Monitors | Null
Mouse | Null
CDs | Null
DvDs | Null
Papers | Null
Clipboards| Null
Markers | Null
KeyChains | Null
现在从表格中的数据提供我期望的结果是这样的
table_Items 在第 1 行的所有列中都有值,
表中没有 Item_ID,因此对于第 1 行中的每个项目,我将插入 '1' 。比检查第 2 行,它有 5 个项目,所以对于每个项目,我将插入 Max(Item_ID) + 1。
第 3 行 < 5 并且第 4 行 < 5 并且第 5 行 <5 列的值 AND 第 3 行 + 第 4 行 + 第 5 行也是 < 5,所以我忽略它们。如果“Item_ID”不是“NULL 或 Empty”,我也会忽略该列。
最终结果将如下所示。
table_Item_Shelves
------------------
Item_Name | Item_ID
-------------------
Pencils | 1
Rubbers | 1
Pens | 2
Books | 1
Staplers | 1
Glue | 1
Buckets | 2
Keyborads | Null
Monitors | Null
Mouse | 1
CDs | 1
DvDs | 1
Papers | Null
Clipboards| 2
Markers | 2
KeyChains | 2
没有设计建议,我知道这很可怕。谢谢。