1

次のようなテーブルがあります。

    CREATE TABLE [dbo].[Table1](
[Option_PK] [bigint] IDENTITY(1,1) NOT NULL,
[Option_1] [varchar](10) NULL,
[Option_2] [varchar](10) NULL,
[Option_3] [varchar](10) NULL)

私がやろうとしているのは、列ごとに有効なエントリを効果的に制限できるテーブル駆動型の制約を追加することです。たとえば、2 番目のテーブルを作成した場合:

    CREATE TABLE [dbo].[Table2](
    [FK_Name] [varchar](10) NOT NULL,
    [FK_Value] [varchar](10) NOT NULL)

次に、Table1 の列 "Option_1" に格納されている値が Table2 の列 "FK_Value" に存在し、"FK_Name" の値が "Option_1" であることを確認します。

これは小切手または FK のいずれかで可能ですか?

** 列のデータ型が一致するように編集します。テーブル宣言の例を手入力してタイプミスしましたが、これは問題とは関係ありませんでした。FK のやり方は知っていますが、私が説明しているような FK のやり方は知りません。

4

2 に答える 2

2

3つのテーブルと3つのFKだけではありませんか?
FKはタイプを一致させる必要があります。

CREATE TABLE [dbo].[Option1]([FK_Value] [nchar](10) NOT NULL)
CONSTRAINT [PK_Option1] PRIMARY KEY CLUSTERED ([FK_Value] ASC)

ALTER TABLE [dbo].[Table1]  WITH CHECK ADD  CONSTRAINT [FK_Table1_Option1] FOREIGN KEY([Option_1])
REFERENCES [dbo].[Table2] ([FK_Value])
GO

または、デフォルトでoption1の値になるOption1列を作成することもできます。Option1の値を
ハードコーディングしようとしましたが、うまくいきませんでした。

ALTER TABLE [dbo].[FKtest1]  WITH CHECK ADD  CONSTRAINT [FK_FKtest1_FKtest1] FOREIGN KEY([Option1],[ValueFK])
REFERENCES [dbo].[FKtest1FK] ([PKoption],[PKvalue])
GO
于 2013-01-21T21:31:30.487 に答える