簡體   English   中英

如何設置主鍵?

[英]How to set a primary key?

SELECT TOP 1000 [LicensePlate]
      ,[Manufacturer]
      ,[Model]
      ,[Colour]
      ,[Year]
      ,[EngineSize]
      ,[Value]
  FROM [Cars2].[dbo].[Cartable1]

上面是我的汽車桌布局。 我對SQL完全陌生,想知道如何將“許可證板”設置為主鍵?

CREATE TABLE Cartable1(
    LicensePlate int NOT NULL PRIMARY KEY,
    Manufacturer varchar(255) NOT NULL,
    Model varchar(255),
    Colour varchar(255),
    Model varchar(255),
    Year int,
    EngineSize int,
    Value float
);

首先按該列查找任何重復項。

SELECT
    C.LicensePlate,
    AmountDuplicates = COUNT(*)
FROM
    Cars2.dbo.Cartable1 AS C
GROUP BY
    C.LicensePlate
HAVING
    COUNT(*) > 1

如果顯示任何記錄,則需要刪除所有重復項或更新其車牌,以使它們不再重復。

您還需要檢查NULL值並更新或刪除它們(主鍵不能為null)。

SELECT
    C.*
FROM
    Cars2.dbo.Cartable1 AS C
WHERE
    C.LicensePlate IS NULL

然后,您可以使用以下命令添加PRIMARY KEY約束:

ALTER TABLE Cars2.dbo.Cartable1 
    ADD CONSTRAINT PK_Cartable1 -- Name of the constraint
    PRIMARY KEY (LicensePlate)

如果LicensePlate可以包含NULL值,則可能會出錯。 您可以使用ALTER TABLE進行ALTER TABLE

ALTER TABLE Cars2.dbo.Cartable1 ALTER COLUMN LicensePlate VARCHAR(20) NOT NULL -- The proper data type

如果已經在該表上定義了主鍵,則必須將其刪除然后創建新的主鍵(一個表一次只能具有1個主鍵約束)。 您可以使用以下查詢檢查是哪一個:

USE Cars2; -- The database name here

DECLARE @TableName VARCHAR(100) = 'Cartable1'
DECLARE @SchemaName VARCHAR(100) = 'dbo'

SELECT 
    ColumnName = Col.Column_Name,
    ConstraintName = tab.CONSTRAINT_NAME
FROM
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS Tab
    INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS Col ON
        Col.Constraint_Name = Tab.Constraint_Name AND 
        Col.Table_Name = Tab.Table_Name
WHERE 
    Constraint_Type = 'PRIMARY KEY' AND 
    Col.Table_Name = @TableName AND
    Col.TABLE_SCHEMA = @SchemaName

一旦看到結果,就可以使用另一個ALTER TABLE刪除當前的主鍵:

ALTER TABLE Cars2.dbo.Cartable1 DROP CONSTRAINT ConstraintNameFromThePreviousQuery

您可以在創建表或通過alter table語句時執行此操作:

create table [Cars2].[dbo].[Cartable1] (
    LicensePlace varchar(?) primary key,
    . . . 
);

我建議在創建表時以及在向表中添加任何數據之前添加主鍵。

If You already have table with data try this ,


 ALTER TABLE [Cars2].[dbo].[Cartable1]
        ADD CONSTRAINT PRIMARY_KEY_LicensePlate PRIMARY KEY(LicensePlate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM