2009-05-07 17 views
8

Sto lavorando su un database pomotion e sotto è quello che la mia CREATE TABLE steatment assomiglia:CREATE TABLE domanda dichiarazione in T-SQL

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 

e vorrei per sbarazzarsi di istruzioni ALTER TABLE e fare loro parte di CREATE tABLE dichiarazioni, so come fare la maggior parte, ma non è sicuro come ottenere CHECK CONSTRAINT durante creare tavolo, qualcuno ha esperienza con questo? o sai come?

+2

Si sta modificando la tabella creata per aggiungere vincoli. Perché vorresti farlo in un altro modo? –

+0

I secondo il sentimento di Ian. Non è necessario creare la tabella prima di poter eseguire il controllo sui vincoli? – Eric

risposta

17

Si può solo aggiungere ogni vincolo di chiave esterna destra nella dichiarazione 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

È possibile aggiungere il vincolo direttamente a ciascuna dichiarazione di colonna secondo la risposta Mitch Wheats. – cjk

+1

@ck - Funziona in entrambi i modi. Grande! –

10

ti sembra di aver perso una colonna (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 per la dichiarazione dei vincoli in linea con le definizioni di colonna. –

2

L'ALTER TABLE ... CONTROLLO Il comando CONSTRAINT consente semplicemente (o disabilita con NOCHECK) il vincolo. I vincoli sono abilitati per impostazione predefinita quando li aggiungi, quindi questa istruzione extra è ridondante e non è necessaria se si aggiungono i vincoli nell'istruzione CREATE.

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

Problemi correlati