Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在多行上增加1值?_Sql_Sql Server - Fatal编程技术网

Sql 如何在多行上增加1值?

Sql 如何在多行上增加1值?,sql,sql-server,Sql,Sql Server,我有一个项目税表,记录了我们州不同县的不同税率。每行有一个ID号(1-130)。当我们需要按字母顺序排列时,我们的前端软件总是按此数字订购税务选项。我们的大多数行都是这样添加的,但我希望能够插入行 因此,在某个数字之后,我需要向每个条目添加1(例如,37-130需要全部增加1)。不幸的是,这是主键。是否可以轻松地在所有这些设备上增加此值?还是在循环中?如果可能的话,我将不得不重复这样做,因为我们将移动大约12个条目 UPDATE ItemTax SET ID = ID + 1 WHERE ID

我有一个项目税表,记录了我们州不同县的不同税率。每行有一个ID号(1-130)。当我们需要按字母顺序排列时,我们的前端软件总是按此数字订购税务选项。我们的大多数行都是这样添加的,但我希望能够插入行

因此,在某个数字之后,我需要向每个条目添加1(例如,37-130需要全部增加1)。不幸的是,这是主键。是否可以轻松地在所有这些设备上增加此值?还是在循环中?如果可能的话,我将不得不重复这样做,因为我们将移动大约12个条目

UPDATE ItemTax
SET ID = ID + 1
WHERE ID = Last ID number

将您的问题视为学术问题,而不是将其作为实际解决方案,您可以这样做:

UPDATE ItemTax
SET ID = ID + 1
WHERE ID > 37

根据您使用此id的方式,最好保持原始id列不变。例如

alter table TaxItem add NewID int null
GO

update TaxItem set NewID = 
case
  when ID between 37 and 130 then ID + 1
  else ID
end
现在您不必更新外键关系等

您可以看到,因为ID通常表示一个代理键,在一个好的设计中,它的值永远不会改变。因此,你想要改变它的价值,这会让人怀疑你对自己的设计理解不够我们都是从无知开始的,我过去做过一些非常糟糕的决定

如果这是NewID唯一的更改,您甚至不需要物理列,那么计算列也可以。但是,如果这是许多模型中的第一个模型,那么物理列可能是更好的选择


您还提到插入行。在一些房间中构建以插入行并根据需要更改值,因为您有空间通过调整值来重新排列行,而无需仅为插入一行而对整个行块重新编号,例如

update TaxItem set NewID = ID * 100

请编辑您的问题,并显示示例数据和所需结果。您没有按字母顺序排列前端软件的选项吗?这将是理想的解决方案。如果有外键引用主键,则更新主键将产生问题。添加一个新行(如OrderIndex),然后对其上的所有记录而不是主键进行排序,如何?因此,如果您在这个表中添加数据,您将不必重新索引主键。不幸的是,我根本不能影响前端软件。它被设计成大多数时候你都可以订购,但是这个系统没有字母顺序选项。对于Microsoft来说,我希望解决的设计选择很糟糕,但我可能被卡住了。您可能需要删除主键约束,或者将IDENTITY\u INSERT itemtax设置为on,运行脚本,然后将IDENTITY\u INSERT itemtax设置为OFF。不过我同意@JPIcard的说法,另一个要订购的列是way to go hereOP没有指定ID是一个标识列,但是如果是,那么您是绝对正确的。正如我所否认的,我并不是说我的答案是个好主意。但它确实回答了这个问题。@JFPicard的答案是,如果OP能够按新列排序,那么他也能够简单地按他想要按字母顺序排列的文本列排序。新专栏是不必要的,比我想象的要容易。但最大的问题是关键,看起来没有好的解决方案。不幸的是,我无法控制对ID的引用。我们使用的产品决定如何仅基于ID订购商品。所以创建NewID无法解决我们的问题。虽然似乎没有好的解决办法。