您当前的位置:KKBlog > 学无止境 > SQLSERVER

sql server判断主键是否存在与创建联合主键PK

20140126142216-716608437.jpg

1、sql server创建联合主键PK

主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的。

    建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。

1.在数据库提供的GUI环境中建立(以SQL7为例)。

    输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。

2.通过SQL语句执行建立。
又分两种,一是在建表语句中直接写,二是建表之后更改表结构。

    在建表语句中直接写:

      Create Table 表名 (字段名1 Int Not Null,
                    字段名2 nvarchar(13) Not Null Primary Key (字段名1, 字段名2),
                    字段名3…………
                    字段名N………… )

    建表之后更改表结构:

     CREATE TABLE 表名 (字段名1 Int Not Null,
                       字段名2 nvarchar(13) Not Null
                       字段名3…………
                       字段名N…………)
    GO

    ALTER TABLE 表名 WITH NOCHECK ADD 
    CONSTRAINT [PK_表名] PRIMARY KEY  NONCLUSTERED 
     (
          [字段名1],
          [字段名2]
     )
    GO

2、遇到的问题

如果您建的表中该列不为空的话那么就可以利用下述语句将该列设置为主键
建立一个表 test
create table Test( autoid int not null)--其中autoid 列不为空
alter table Test 
Add constraint ta primary key(autoid)--将autoid列设置为主键
下述代码删除该主键信息
alter table Test
drop constraint ta---将autoid列取消主键

如果上述建表语句该为
create table Test (autoid int null) --其中autoid列为空
再使用
alter table Test 
Add constraint ta primary key(autoid) 想把autoid列设为主键
这是出现下列错误
无法在表 'Test' 中可为空的列上定义 PRIMARY KEY 约束
即要想该列为主键,除非该列不能为空是个前提

3、小小的例子

--3、修改考试表联合主键
alter table JC_Tests ALTER COLUMN ClassID uniqueidentifier not NULL
IF EXISTS (select * from sysobjects where parent_obj=object_id(N'JC_Tests') and name='PK_JC_Tests' and xtype='PK')
BEGIN
alter table JC_Tests DROP constraint [PK_JC_Tests]
end
ALTER TABLE JC_Tests WITH NOCHECK ADD 
CONSTRAINT [PK_JC_Tests] PRIMARY KEY  NONCLUSTERED 
 (
      [ID],
      [ClassID]
 )
GO


二维码
意见反馈 二维码