我有一个DataGrid View从我的数据库中提取一些项目。我想要实现的是能够编辑包大小或bar_code字段。我知道如何更新数据库中的值,但如果数据相同,我将如何进行更新?在许多情况下,条形码的含义是多个包装尺寸与一个条形码编号相关。我们说我有以下屏幕截图。发生了数据输入错误,bar_code和PackSize列完全相同。我想将第一个条形码更改为" 1234。"我怎么做到这一点?我无法将条形码更新为#textBox1.Text'其中bar_code =' 771313166386'因为它会改变两个数据。我如何一次只关注一行数据?
答案 0 :(得分:2)
您可以尝试使用此查询仅更新第一行:
UPDATE TOP (1) my_table
SET bar_code = '1234'
WHERE bar_code = '771313166386'
您的表格中应该有
auto-increment
id
列或Primary key
。
答案 1 :(得分:1)
我建议你在后端处理数据重复操作的逻辑,而不是将它们拉到网格中并在那里处理它。
以下查询将帮助您根据提到的列检索重复记录。您可以根据您的要求将其更改为UPDATE或DELETE。
-- Using cte and ranking function
;With CTE
As
(
Select
Product,
Description,
BarCode,
PackSize
Row_Number() Over(Partition By Product, BarCode, PackSize Order By Product) As RowNum
From YourTable
)
Select * From CTE
-- Where RowNum > 1;
希望这有用:)
答案 2 :(得分:1)
这可能无法直接帮助您解答。但是,重要的是要提到您的表设计不正确。您应该通过在表格中创建主键来确保data integrity。
因此,当您需要更新产品时,您只需要更新一行。
然后,您可以添加更多表并在它们之间使用外键引用。
答案 3 :(得分:1)
您需要唯一地代表产品。根据您的示例数据,我猜您桌面上没有任何主键。
您可以做的是在列上指定唯一约束以确保无法完成此类数据输入。
如果您无法提供唯一标识行的列列表,则可以通过指定Identity
列来使用代理键,然后在更新时始终将约束放在thisIdentityColumn=value
答案 4 :(得分:0)
发生了数据输入错误,bar_code和PackSize列都是 完全相同的
我认为这是关键。从本质上讲,确切的重复是无意的,行应该是唯一的。此外,bar_code
+ pack_size
似乎是您的主键(正确输入数据)。
因此,当您进行更新时,只需更新找到的匹配bar_code和pack_size的第一行。如果它不是唯一的,那么更新应确保您距离数据库中的唯一行更近一步。
如果您需要非口头答复,请告诉我。