私は、既存のデータベースを扱うのはやや醜い問題があります。このデータベースは、各トランザクション(簡体字)用のライン項目を含むTransaction_Items
テーブルを持っています"insert" SQL Serverで最小のIDで新しい行
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
明確にするEDIT:
は、基本的にはこのように終わる私は、そうでない場合は、このテーブルを使用しているアプリケーションを変更するアクセス権を持っていません。テーブルに新しい列を追加することはできません。
私は、アイデンティティの価値が混乱の原因となるため変更できないことは許されていないことを知っています。だから私は、唯一の答えは、項目名の値を "下に"行を "移動"することになると仮定している理由です。
はい、これは醜いものであり、理想からはほど遠いものです。残念なことに、レガシーアプリケーションを扱い、それを最大限に活用することは、多くの企業で現実的です。少なくとも、私は実際にデータベースへの読み書きアクセス権を持っています。
これは実際にやるべきことではありません、IMO。実際には、表からデータを取り出す問合せを、カスタムorder by文を変更するだけです。例えば'order by case item_name = 'memo'、次に0 else 1 end、transaction_item_id' – ZLK
' transaction_item_id'に '-1'の値を挿入してみてはどうでしょうか? –
** ID列の既存の値を更新することはできません** SQL Serverでは** SET ** IDENTITY_INSERT ON'コマンドで特定のカスタム値を**挿入することができますが、既存のID列の値。 –