ALTER TABLE [dbo].[tablename] WITH NOCHECK ADD 
CONSTRAINT [PK_tablename] PRIMARY KEY  CLUSTERED 
(
[id],----联合主键列
[id1]--------联合主键列
)  ON [PRIMARY] 
GO

解决方案 »

  1.   

    --你借用一个中间来做吧. 用alter table 太麻烦了.
    --测试数据
    create table ta(fname varchar(10), lname varchar(10), value int)
    insert ta select 'Mark', 'Green',   10
    union all select 'Jenny', 'Alfred', 20 
    union all select 'Cate', 'Thomshon',30
    go
    --修改
    create table tb(fname varchar(10), lname varchar(10)
           ,value int, primary key(fname, lname))insert tb select * from ta
    drop table ta
    exec sp_rename tb, taselect * from ta
    --清除
    drop table ta
      

  2.   

    --请教楼上!
    --下面这段程序出现错误:"无法在表 'ta' 中可为空的列上定义 PRIMARY KEY 约束。"
    --测试数据
    create table ta(fname varchar(10), lname varchar(10), value int)
    insert ta select 'Mark', 'Green',   10
    union all select 'Jenny', 'Alfred', 20 
    union all select 'Cate', 'Thomshon',30
    go
    --修改
    ALTER TABLE [dbo].[ta] WITH NOCHECK ADD 
    CONSTRAINT [PK_tablename] PRIMARY KEY  CLUSTERED 
    (
    fname, lname
    )  ON [PRIMARY] 
    GO
    select * from ta
    --清除
    drop table ta
      

  3.   

    -----楼上:
    ------错误说的很明白:无法在表 'ta' 中可为空的列上定义 PRIMARY KEY 约束
    --改成:
    create table ta(fname varchar(10) not null, lname varchar(10) not null, value int)
    insert ta select 'Mark', 'Green',   10
    union all select 'Jenny', 'Alfred', 20 
    union all select 'Cate', 'Thomshon',30
    go
    --修改
    ALTER TABLE [dbo].[ta] WITH NOCHECK ADD 
    CONSTRAINT [PK_tablename] PRIMARY KEY  CLUSTERED 
    (
    fname, lname
    )  ON [PRIMARY] 
    GO
    select * from ta
    --清除
    drop table ta---道理跟主键不能为空是一样的
      

  4.   

    但是如果人家之间的表结构就是这样定义的啊, 
    让你alter table, 你却要让人家改表结构(加 not null).
    如果可以直接表的定义语句的话, 那我直接在表的定义语句中加一条primary key (fname, lname)就行了.还用得着,绕你这么一个大圈子吗?
      

  5.   

    ---如果是像楼上说的那样定义的话,也可以这样ALTER TABLE ta alter 
    column fname varchar(10) not null
    goALTER TABLE ta alter 
    column lname varchar(10) not null
    go
    ALTER TABLE [dbo].[ta] WITH NOCHECK ADD 
    CONSTRAINT [PK_tablename] PRIMARY KEY  CLUSTERED 
    (
    fname, lname
    )  ON [PRIMARY] 
    GO
    ------我只是想回答楼主的问题:表(未定义主键)建好后,将不能在多列上建立主键? 没考虑很多
    ------如果联合主键列的数据有null或者不符合主键要求的数据的话,不管你用什么方法也是不合适的
      

  6.   

    直接在企业管理器里用鼠标一拉或ctrl键配合,选择多个字段,然后一点工具栏上的小钥匙,就可以了
      

  7.   

    "直接在企业管理器里用鼠标一拉或ctrl键配合,选择多个字段,然后一点工具栏上的小钥匙,就可以了"
    在定义表时可以。表建好后,就不行了。