"插入" SQL Server

时间:2016-11-03 22:36:47

标签: sql sql-server insert

我有一个处理现有数据库的丑陋问题。此数据库有一个Transaction_Items表,其中包含每个事务的行项目(简化):

Transaction_Item_ID(Identity - Auto)  Transaction_ID   Item_Name
-----------------------------------------------------------------
1                                      12345            Service1
2                                      12345            Service2
3                                      12345            Service3
4                                      12346            Service1

这些交易显示在发票上,应用程序始终根据Transaction_Item_ID在该发票上订购。

我需要将服务项添加到始终首先显示的特定交易中,让我们调用其项名称MEMO。否则,项目需要保持相同的顺序。因此,此MEMO项始终需要具有与事务匹配的Transaction_Item_ID中最低的Transaction_Item_ID。因为Item_name是一个自动标识列,所以我不能将其更改为较低的值。我认为我基本上需要将第一行MEMO更新为Transaction_Item_ID(Identity - Auto) Transaction_ID Item_Name ----------------------------------------------------------------- 1 12345 MEMO 2 12345 Service1 3 12345 Service2 4 12346 Service1 5 12345 Service3 ,同时将现有项目名称复制到下一个最低行,依此类推,直到将上一个最后一行值插入到新行中行。

问题是如何做到这一点,或者是否有更好的方法来实现相同的结果。

基本上就像这样结束:

Select top 1
Element1 = XV.value('(.)[1]','nvarchar(32)')
from @xml.nodes('Parameters/Parameter/Value') as x(XV)

编辑澄清:我无权更改使用此表的应用程序。我无法在表格中添加新列。

我知道身份值不能/不应该改变,因为这会导致混乱。这就是为什么我认为唯一的答案是"移动"项目名称值"向下"行。

是的,这很难看,远非理想。不幸的是,处理遗留应用程序并充分利用它是许多企业的现实。至少我实际上对数据库有读/写访问权。

1 个答案:

答案 0 :(得分:1)

我不喜欢你更新每一行的想法。

此方案中最简单的解决方案是重命名此表并将其用作临时表,然后使用所需的顺序执行插入新表(具有原始表的名称)。

或者,更改应用程序中的顺序。