2016-11-03 5 views
0

私は、既存のデータベースを扱うのはやや醜い問題があります。このデータベースは、各トランザクション(簡体字)用のライン項目を含む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_nameMEMOに更新する必要があると思います。前の最後の行の値が新しい行に挿入されるまで、既存の項目名を次の一番下の行にコピーします。

質問は、これを行う方法か、同じ結果を達成するためのよりよい方法があるかどうかです。

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:

は、基本的にはこのように終わる私は、そうでない場合は、このテーブルを使用しているアプリケーションを変更するアクセス権を持っていません。テーブルに新しい列を追加することはできません。

私は、アイデンティティの価値が混乱の原因となるため変更できないことは許されていないことを知っています。だから私は、唯一の答えは、項目名の値を "下に"行を "移動"することになると仮定している理由です。

はい、これは醜いものであり、理想からはほど遠いものです。残念なことに、レガシーアプリケーションを扱い、それを最大限に活用することは、多くの企業で現実的です。少なくとも、私は実際にデータベースへの読み書きアクセス権を持っています。

+4

これは実際にやるべきことではありません、IMO。実際には、表からデータを取り出す問合せを、カスタムorder by文を変更するだけです。例えば'order by case item_name = 'memo'、次に0 else 1 end、transaction_item_id' – ZLK

+0

' transaction_item_id'に '-1'の値を挿入してみてはどうでしょうか? –

+0

** ID列の既存の値を更新することはできません** SQL Serverでは** SET ** IDENTITY_INSERT ON'コマンドで特定のカスタム値を**挿入することができますが、既存のID列の値。 –

答えて

1

私は各行を更新することをお勧めしません。

このシナリオで最も簡単な解決策は、このテーブルの名前を変更してステージングテーブルとして使用し、新しいテーブル(元のテーブルの名前を持つテーブル)に挿入して、目的の順序を使用することです。

または、アプリケーションの順序を変更してください。

+0

ありがとう、私の編集を参照してください。私はアプリケーションを変更したり、テーブルを変更するためのアクセス権を持っていません。死んだ企業からのレガシーソフトウェアの喜び。 – Thildemar

+0

あなたはどのようなDBの権利を持っていますか?DB上のユーザー/ ADログインを確認する(SSMS:データが保存されているdbフォルダに移動 - >セキュリティ - >ユーザー - >ログイン/ ADグループ - >プロパティ - >メンバーシップを右クリック) – TJB

+0

そのデータベース。問題は、そのデータにアクセスするアプリケーションを変更することができないということです。つまり、データベースの変更によってそのデータが破棄される可能性があります。名前を変更して置換すると、アプリケーションがまだそのテーブルにアクセスして、それ自身の新しい行を書き込もうとするため、問題が発生する可能性があります。 – Thildemar

関連する問題