2009-05-07 14 views
8

estoy trabajando en una base de datos pomotion y por debajo es lo que mi CREATE TABLE steatment parece:Crear una tabla en cuestión declaración de 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 

y me gustaría deshacerse de instrucciones ALTER TABLE y crea ellos parte de CREATE TABLE declaraciones, sé cómo hacer más, pero no estoy seguro de cómo obtener CHECK CONSTRAINT durante create table, ¿Alguien tiene experiencia con esto? o sabe cómo hacerlo?

+2

Está alterando la tabla creada para agregar restricciones. ¿Por qué querrías hacerlo de otra manera? –

+0

En segundo lugar el sentimiento de Ian. ¿No es necesario crear la tabla antes de poder controlar las restricciones? – Eric

Respuesta

17

Usted puede añadir cada restricción de clave externa derecha en la declaración 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

Puede agregar la restricción directamente a cada declaración de columna según la respuesta de Mitch Wheats. – cjk

+1

@ck - Funciona en ambos sentidos. ¡Estupendo! –

10

Usted parece haber perdido una columna (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 para declarar las restricciones en línea con las definiciones de columna. –

2

El ALTER TABLE ... VER El comando CONSTRAINT simplemente habilita (o inhabilita con NOCHECK) la restricción. Las restricciones se habilitan de manera predeterminada cuando las agrega, por lo que esta declaración adicional es redundante y no es necesaria si agrega las restricciones en la instrucción CREATE.

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

Cuestiones relacionadas