問題タブ [identity-column]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ID 列を含む行の再挿入
実行するジョブを含む SQL Server (2008 R2) にキューを実装しています。完了すると、ジョブは履歴テーブルに移動され、フラグが成功または失敗に設定されます。キュー テーブル内のアイテムには、主キーとして ID 列があります。履歴キューには、この ID とタイム スタンプの組み合わせが PK として含まれています。
ジョブが失敗した場合、それを再実行するオプションが欲しいのですが、これは、履歴テーブルから元に戻し、ライブ キューに戻すことだと考えられています。トレーサビリティの目的で、再挿入された行に元のエントリと同じ ID を持たせたいのですが、これは ID 列であるため問題が発生します。
考えられる解決策は 2 つあります。
1) IDENTITY_INSERT を使用します。
2) ライブ キューと履歴キューの両方から最大 ID 値を取得して追加するなど、一意の ID を生成するカスタム ロジックを作成します。
2 が面倒で、おそらくパフォーマンスが悪く、神経症の皮膚が這うようになることを除けば、2 には実際の問題は見られません...
オプション 1 は気に入っていますが、その意味が十分にわかりません。これはどのように機能しますか?そして、これを 2 つのテーブルに対して同時に行うと、物事がクラッシュしたり燃えたりすることを私は知っています。2 つのスレッドが同じテーブルに対して同時にこれを行うとどうなりますか?
これは、半一般的に使用されるストアド プロシージャに対してこれを行う良い方法ですか、それとも、ブルー ムーンで 1 回だけデータをバッチ挿入するためにこの手法を使用する必要がありますか?
どちらが最良の選択肢であるか、またはより良い方法があるかについて何か考えはありますか?
sql - リレーショナル データベースの PK ID 列に数値を追加するスマートな方法はありますか?
理想的な状況とはほど遠いですが、他の 4 つのテーブルとの FK リレーションを持つ PK Identiy 列に数字「1」を追加して、データベースを修正する必要があります。私は基本的に4桁の数字を5桁の数字にしています。関係を維持する必要があります。数値を var に格納し、Set クエリを実行して 1 を追加し、テーブルごとにそれを行うことができます...
これを行うより良い方法はありますか?
c# - LINQPadを使用してID列を持つSQL Compact 4テーブルにエンティティを挿入する
LINQPad を使用して SQL CE 4 データベースに新しいレコードを挿入しようとしていますが、テーブルの ID の問題に問題があります。たとえば、次の単純なテーブルがあるとします。
私は間違ったやり方をしているかもしれませんが、LINQPadでこれを試しました
しかし、私は SqlCeException という状態を取得します
SQL を使用してレコードを挿入できます。これは、SQL CE またはそのデータ プロバイダーからのエラーなしで機能し、SQL CE は、私が必要としている Id 列を設定します。
私が見逃している別のステップはありますか?それがLINQPadの問題かどうかさえわかりませんが、今このコードを試しているので、とにかく尋ねたいと思いました。
entity-framework - Entity Frameworkで、挿入後にID列の値を取得する
EF4を使用しています。新しいMyObjectをデータベースに挿入したいと思います。MyObjectには2つのフィールドがあります。
Id:int(Identity)およびName:string
ドキュメントで見たように、Entity Frameworkは、MyObject.IdをSaveChanges()の呼び出し後にデータベースによって生成された値に設定することになっていますが、私の場合はそうなりません。
アップデート:
これは私のエンティティの1つで発生し、他のエンティティは正常に機能します。ちなみに、確認したところ、DB列はIDで、StoreGeneratedPatternはIdentityに設定されています。これがSSDLです。違いはわかりません。最初のものは正しく機能していません:
更新はデータベースで正常に実行され、IDは生成されますが、エンティティオブジェクトは新しいIDで更新されません。
sql-server - トリガーは ID ID である主キーをコピーできますか?
INSERT
テーブル内X
でそのレコードをHistory
すぐに別のテーブルにコピーした後、やりたいと思います。
現在、テーブルには主キーがIdentity
列として含まれているため、レコードは実際に挿入されるまで主キー ID を持ちません。
私の質問は、trigger
このレコードに対して a を実行すると、そのレコードの ID ID を取得できますか、それとも空白のままになりますか?
c# - SQLServer-フォーマットされたID列
テーブルにFOO-BAR-[ID番号]としてフォーマットされた主キー列が必要です。例:
SQL Serverはこれを実行できますか?または、シーケンスを管理するためにC#を使用する必要がありますか?その場合、EntityFramworkを使用して次の[ID番号]の部分を取得するにはどうすればよいですか?
ありがとう
編集:
これを行う必要があるのは、この列が顧客に送信される通知の一意の識別子を表すためです。
- FOOは定数文字列になります
- BARは、通知の種類(検出、警告、施行のいずれか)によって異なります。
では、int ID列だけを用意し、C#のビジネスロジックレイヤーに値を追加する方がよいでしょうか。
sql-server - 現在挿入中の行の識別
私はプロジェクトに取り組んでいますが、疑問が生じました:挿入ステートメントは、それ自体の ID を別のフィールドに挿入できますか?
アイデアは、レコードの階層配置があり、「親」フィールドが親レコードの ID を指し、特定のツリーの「トップ」レコードがそれ自体を指すだけであるということです。
もちろん、親に対して null のままにすることも、後で戻ってその ID を挿入することもできます。しかし、レコードが挿入されているときに IDENTITY を別のフィールドに挿入する SQL Server 操作があったかどうか疑問に思っていましたか?
編集:または、フィールドのデフォルト値を別のフィールドの値に指定する方法はありますか? それはまた問題に対処するでしょう。
EDIT:別のフィールドであるデフォルトのフィールドはすでに回答されているようで、答えはノーです。トリガーを使用してください。もちろん、それは制約と非 null フィールドの問題には役に立ちません。( http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76 )
c# - 新しいレコードを保存しようとしたり、既存のレコードを更新しようとすると、EFはGuidとして0000-0000-0000-xxxを返しますか?
C#プロジェクトでEF4を使用しています。私が直面している問題は、レコードを保存しようとすると、主キー違反が発生し、PK値が「0000-0000-0000-xxx」になることです。私の推測では、EFはIsIdentityフラグを認識せず、GUID値を生成しません。テーブルのSQLServerデータベースで、PK(uniqueidentifier> guid)を指定し、それをIdentityColumnとして設定します。したがって、GUIDはSQL Serverで生成されるため、これがプロジェクト自体に伝わると予想されます。このバグを克服する方法はありますか?
sql - 自動インクリメントIDを使用してテーブルに挿入するときに外部キー関係を維持する
DefectとDefectDataの2つのテーブルがあります。各欠陥には、1つまたは複数のDefectDataがある場合とない場合があります。そのため、DefectDataには外部キーとしてDefectId列があります。
両方のテーブルのIDは、自動インクリメントIDです。
私が抱えている問題は、新しい欠陥とその欠陥データを挿入したいときに、欠陥が最初に挿入されてIDを取得することですが、そのIDがDefectDataに何を与えるのかわかりません。私の解決策は、挿入されたデータに一致する欠陥から選択してIDを取得することです。
- 欠陥を挿入
- その欠陥のIDを取得します
- Idが2のDefectData(ゼロまたは多数)を挿入します。
IdentityInsertをオンに設定してから自分のIDで挿入すると、これはWebサーバーによって実行され、同時呼び出しが発生する可能性があるため、機能しません(私はここにいますか?)。
前もって感謝します。