Создание таблицы с составным первичным ключом - PullRequest
1 голос
/ 13 апреля 2011

Хорошо, я хочу создать таблицу

TABLE log_table
email nvarchar(255)
,salesrep nvarchar(20)
,blastid int
,timestamp datetime

Теперь значением по умолчанию для timestamp будет дата и время, когда вставляется запись, и я хочу, чтобы первичный ключ был на email и blastid.

Я знаю, что вы можете сделать это с кластерными индексами, но я не уверен в синтаксисе того, как это сделать. Пожалуйста, любая помощь будет принята с благодарностью. Я использую SQL Server Management Studio 2008

Ответы [ 5 ]

2 голосов
/ 13 апреля 2011
CREATE TABLE dbo.log_table
(
    email nvarchar(255) NOT NULL,
    salesrep nvarchar(2) NULL,
    blastid int NOT NULL,
    timestamp datetime NULL
)

ALTER TABLE dbo.log_table ADD CONSTRAINT
DF_log_table_timestamp DEFAULT GetDate() FOR timestamp

ALTER TABLE dbo.log_table ADD CONSTRAINT
PK_log_table PRIMARY KEY CLUSTERED 
(
    email,
    blastid
)
GO

Если вы используете графический интерфейс создания таблицы, вы можете использовать элемент управления, нажимая на столбцы, чтобы установить в качестве первичных ключей.

2 голосов
/ 13 апреля 2011
CONSTRAINT PK_LOG_TBL PRIMARY KEY CLUSTERED (email ASC, email ASC)
1 голос
/ 13 апреля 2011

Я бы использовал что-то другое, а не «метку времени» - это тип данных сервера SQL.

    create table log_table
    (
    email nvarchar(255) not null
    ,salesrep nvarchar(20)
    ,blastid int not null
    ,timestamp datetime default getdate())


    ALTER TABLE dbo.log_table ADD CONSTRAINT
        PK_log_table PRIMARY KEY CLUSTERED 
        (
        email, blastid
        ) WITH( STATISTICS_NORECOMPUTE = OFF, 
IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
1 голос
/ 13 апреля 2011

Вам необходимо создать составной первичный ключ.синтаксис следующий:

CREATE TABLE log_table
(
    email nvarchar(255),
    salesrep nvarchar(20),
    blastid int,
    timestamp datetime,
    PRIMARY KEY (email, blastid)
)
1 голос
/ 13 апреля 2011

CREATE TABLE log_table ( email NVARCHAR(255) NOT NULL, salesrep NVARCHAR(255), blastid INT, [timestamp] DATETIME, PRIMARY KEY (email, blastid) )

Я полагаю, что по умолчанию метка времени будет выполнена с помощью 'GETDATE ()' на вставке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...