2009-05-07 3 views
8

T-SQLでTABLE文質問を作成し、以下のsteatmentがどのように見えるCREATE TABLEを私のものです:は、私は特別値引きデータベースに取り組んでいます

CREATE TABLE [dbo].[sponsors] 
(
    [InstId] [bigint] NOT NULL, 
    [EncryptedData] [varbinary](44) NOT NULL, 
    [HashedData] [varbinary](22) NOT NULL, 
    [JobId] [bigint] NOT NULL, 
    CONSTRAINT [PK_sponsors] PRIMARY KEY CLUSTERED 
    (
     [InstId] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[sponsors] WITH CHECK ADD CONSTRAINT [FK_sponsors_jobs] FOREIGN KEY([JobId]) 
REFERENCES [dbo].[jobs] ([Id]) 
GO 

ALTER TABLE [dbo].[sponsors] CHECK CONSTRAINT [FK_sponsors_jobs] 
GO 

ALTER TABLE [dbo].[sponsors] WITH CHECK ADD CONSTRAINT [FK_sponsors_titles] FOREIGN KEY([TId]) 
REFERENCES [dbo].[titles] ([TId]) 
GO 

ALTER TABLE [dbo].[sponsors] CHECK CONSTRAINT [FK_sponsors_titles] 
GO 

そして、私はALTER TABLE文を取り除くために好​​きで、作ると思いますそれらはCREATE TABLEの一部です 作成中にCHECK CONSTRAINTを取得する方法がわかりましたが、誰にもこの経験がありますか?またはどのように知っている?

+2

制約を追加するために作成した表を変更しています。なぜあなたはそれを他の方法でやりたいのですか? –

+0

私は二番目のイアンの感情です。制約をチェックする前にテーブルを作成する必要はありませんか? – Eric

答えて

17

あなたはちょうど、CREATE TABLE宣言で各外部キー制約を追加することができます。

CREATE TABLE [dbo].[sponsors] 
(
    [InstId] [bigint] NOT NULL, 
    [EncryptedData] [varbinary](44) NOT NULL, 
    [HashedData] [varbinary](22) NOT NULL, 
    [JobId] [bigint] NOT NULL, 
    [TId] [int] NOT NULL, 
    CONSTRAINT [PK_sponsors] PRIMARY KEY CLUSTERED 
    (
     [InstId] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 

    CONSTRAINT [FK_sponsors_jobs] FOREIGN KEY([JobId]) 
            REFERENCES [dbo].[jobs] ([Id]), 

    CONSTRAINT [FK_sponsors_titles] FOREIGN KEY([TId]) 
            REFERENCES [dbo].[titles] ([TId]) 
) ON [PRIMARY] 
+2

Mitch Wheatsの回答ごとに、列の宣言に直接制約を追加できます。 – cjk

+1

@ck - どちらの方法でも動作します。すばらしいです! –

10

あなたは、カラム(TID)

CREATE TABLE [dbo].[sponsors] 
( 
    [InstId] [bigint] NOT NULL 
     CONSTRAINT [PK_sponsors] PRIMARY KEY CLUSTERED, 
    [EncryptedData] varbinary NOT NULL, 
    [HashedData] varbinary NOT NULL, 
    [JobId] [bigint] NOT NULL 
     CONSTRAINT [FK_sponsors_jobs] FOREIGN KEY REFERENCES [dbo].[jobs] ([Id]), 
    [TId] int NOT NULL 
     CONSTRAINT [FK_sponsors_titles] FOREIGN KEY REFERENCES [dbo].[titles] ([TId]) 
) ON [PRIMARY] 
+2

+1列定義でインラインで制約を宣言します。 –

2

ALTER TABLEを逃しているように見える... CHECK CONSTRAINTコマンドは、単に制約を有効にする(またはNOCHECKで無効にする)。制約を追加すると、制約がデフォルトで有効になります。したがって、この余分な文は冗長であり、CREATE文に制約を追加する場合は不要です。

http://msdn.microsoft.com/en-us/library/ms190273(SQL.90).aspx

関連する問題