0

テーブルにFOO-BAR-[ID番号]としてフォーマットされた主キー列が必要です。例:

FOO-BAR-1  
FOO-BAR-2  
FOO-BAR-3  
FOO-BAR-4  
FOO-BAR-5  

SQL Serverはこれを実行できますか?または、シーケンスを管理するためにC#を使用する必要がありますか?その場合、EntityFramworkを使用して次の[ID番号]の部分を取得するにはどうすればよいですか?

ありがとう

編集:

これを行う必要があるのは、この列が顧客に送信される通知の一意の識別子を表すためです。

  • FOOは定数文字列になります
  • BARは、通知の種類(検出、警告、施行のいずれか)によって異なります。

では、int ID列だけを用意し、C#のビジネスロジックレイヤーに値を追加する方がよいでしょうか。

4

4 に答える 4

3

レポートにこの「合成」フィールドが必要な場合は、次のことをお勧めします。

  1. INTIDENTITYフィールドをテーブルのPKとして使用します
  2. このテーブルのビューを作成します。このビューでは、文字列とタイプを使用して、必要なフィールドを追加で生成できます。
  3. repoortsでこのビューを使用してください。

しかし、DBの設計には大きな問題があると思います。正規化を使用して再設計してみてください。

于 2011-08-09T02:29:54.733 に答える
1

テーブルのPKとして何でも設定できます。しかし、この場合IDENTITY、自動インクリメントのintに設定し、使用されている理由に応じて、SQL、BLL、またはUIで手動でFOO-BAR-を追加します。にビジネス上の理由がある場合は、これらもDB行の値として設定する必要がありますFOOBAR次に、実際に値を使用する理由に応じて、2つの3つの列の間にDBにキーを作成できます。

しかし、IMOは、このような方法でIDを連結し、そのようにDBに格納する本当の理由はないと思います。しかし、繰り返しになりますが、実際にintはIDとしてのみを使用します。

于 2011-08-09T02:21:30.957 に答える
0

もう1つのオプションは、コードと値のテーブルと呼ばれる、以前のチームを使用することです。正確にはこれを使用しませんでした(一部のキーテーブルの環境の不一致を防ぐためにIDを自動インクリメントする代わりに使用しました)が、実行できることは次のとおりです。

  1. カテゴリごとに行を持つテーブルを作成します。行の2つ(またはそれ以上)の列-カテゴリ名と次の番号の最小値。
  2. 他のテーブルにレコードを挿入するときは、ストアドプロシージャを実行して、そのカテゴリで次に使用可能なID番号を取得し、コードと値のテーブルの番号を1ずつ増やし、カテゴリと番号を連結して挿入します。 。

ただし、メインテーブルが大量のインサートを含む大量のテーブルである場合は、順序が狂ってしまう可能性があります。

いずれにせよ、ボリュームが大きくなくても、なぜこれを実行したいのかを再検討し、別のより良い方法(ビジネスレイヤーやUIに実行させるなど)があるかどうかを確認する方がよいと思います。 、他の人が示唆しているように)。

于 2011-08-09T02:27:35.167 に答える
0

次のような計算列を使用することで、かなりの可能性があります。

CREATE TABLE #test (
    id INT IDENTITY UNIQUE CLUSTERED,
    pk AS CONCAT('FOO-BAR-', id) PERSISTED PRIMARY KEY NONCLUSTERED,
    name NVARCHAR(20)
)

INSERT INTO #test (name) VALUES (N'one'), (N'two'), (N'three')

SELECT id, pk, name FROM #test

DROP TABLE #test

pkはVARCHARタイプであるため、意図的にNONCLUSTEREDに設定されていますが、とにかく一意になるIDENTITYフィールドはUNIQUECLUSTEREDに設定されていることに注意してください。

于 2016-07-06T12:35:53.543 に答える