2009-05-07 15 views
8

ich auf einer pomotion Datenbank arbeite und unten ist, was CREATE TABLE meine steatment wie folgt aussieht:TABLE-Anweisung Frage in T-SQL CREATE

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 

Und ich möchte von ALTER TABLE-Anweisungen, um loszuwerden, und machen sie Teil von CREATE TABLE Aussagen, ich weiß, wie man am meisten, aber nicht sicher, wie man CHECK CONSTRAINT während Tabelle erstellen, hat jemand Erfahrung damit? oder wissen wie?

+2

Sie ändern die erstellte Tabelle, um Einschränkungen hinzuzufügen. Warum willst du es anders machen? –

+0

Ich zweite Ian Stimmung. Müssen Sie die Tabelle nicht erstellen, bevor Sie die Einschränkungen überprüfen können? – Eric

Antwort

17

Sie können nur jeden Fremdschlüssel rechts in der Tabelle Deklaration CREATE hinzu:

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

Sie können die Einschränkung direkt zu jeder Spalte Deklaration hinzufügen, wie von Mitch Wheats geantwortet. – cjk

+1

@ck - Es funktioniert in beide Richtungen. Groß! –

10

Sie scheinen eine Spalte (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 zum Deklarieren der Einschränkungen inline mit den Spaltendefinitionen. –

2

Die ALTER TABLE ... Sehen Sie verpasst zu haben CONSTRAINT-Befehl aktiviert (oder deaktiviert mit NOCHECK) die Einschränkung. Constraints werden beim Hinzufügen standardmäßig aktiviert. Daher ist diese zusätzliche Anweisung redundant und wird nicht benötigt, wenn Sie die Constraints in der CREATE-Anweisung hinzufügen.

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