使用复合主键创建表

时间:2011-04-12 21:41:38

标签: sql sql-server-2008 clustered-index

好的我想创建一个表

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

现在timestamp的默认值是插入记录的日期时间,我希望主键位于emailblastid上。

我知道你可以使用聚簇索引来完成它,但我不确定如何实现这一点的语法。请,任何帮助将不胜感激。我正在使用SQL Server Management Studio 2008

5 个答案:

答案 0 :(得分:2)

CONSTRAINT PK_LOG_TBL PRIMARY KEY CLUSTERED (email ASC, email ASC)

答案 1 :(得分:2)

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

如果您使用的是创建表格GUI,则可以在单击列时使用控件设置为主键。

答案 2 :(得分:1)

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

我相信时间戳默认值是在插入时使用'GETDATE()'完成的。

答案 3 :(得分:1)

您需要创建复合主键。语法如下:

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

答案 4 :(得分:1)

我会使用其他东西而不是“timestamp” - 这是一个sql server数据类型。

    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]