私は SQL Server 2008 R2、C#、および ASP.Net を使用しています。チケット番号と、そのチケットがテーブルに表示される回数で構成される複合主キーを持つテーブルがあります。チケットの頻度は、C# コードによって計算されます。
VTTTickets.InsertParameters[0].DefaultValue = VTTTTicketNoBox.Text;
string CommString = "SELECT COUNT(*) FROM [Tickets] WHERE [Ticket_No] = " +
VTTTTicketNoBox.Text;
string ConnString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
OdbcConnection Conn = new OdbcConnection(ConnString);
Conn.Open();
OdbcCommand FooCommand = newOdbcCommand(CommString,Conn);
int FooVal = Convert.ToInt32(FooCommand.ExecuteScalar()) + 1;
VTTTickets.InsertParameters[1].DefaultValue = Convert.ToString(FooVal);
VTTTTicketNoBox.Text = "";
Conn.Close();
私のテーブルの制約/その他のコード
CONSTRAINT [PK_Tickets] PRIMARY KEY CLUSTERED
([Ticket_No] ASC, [Ticket_Sub_No] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [Unique_Ticket_No] UNIQUE NONCLUSTERED
([Ticket_No] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
) ON [PRIMARY]
GO
一意制約の理由は、主複合キーのその部分が他の 2 つのテーブルの外部キーでもあるためです。私が取得し続けるエラーは、一意の制約付き列に重複した値が存在することを私に怒鳴るときです。チケットが再送信される可能性があるため、すべてが開発から本番環境に移行すると、これが発生する可能性があります。
一意キー制約なしで外部キーを作成する方法はありますか? そうでない場合、どうすればこの問題を回避できますか?