1
votes

Comment définir une clé primaire?

SELECT TOP 1000 [LicensePlate]
      ,[Manufacturer]
      ,[Model]
      ,[Colour]
      ,[Year]
      ,[EngineSize]
      ,[Value]
  FROM [Cars2].[dbo].[Cartable1]
Above is my layout for a cars table. I am completely new to SQL and was wondering how I would set 'Licence Plate' as the primary key?

2 commentaires

Alors qu'avez-vous essayé? Il s'agit d'une requête SELECT, qui est une instruction DML (langage de manipulation de données). La définition d'une clé primaire nécessite l'utilisation d'une instruction DDL (langage de définition de données). En outre, utilisez-vous SSMS (SQL Server Management Studio)? Il existe des raccourcis et des options d'interface graphique que vous pouvez utiliser.


Faites un clic droit votre table dans l'explorateur d'objets , le menu contextuel affichera Design Cliquez dessus. Il vous montrera la conception de votre table.Vous pouvez maintenant cliquer avec le bouton droit sur une colonne et sélectionner Définir la clé primaire ou sélectionner votre colonne et rechercher l'icône de clé dans la barre d'outils. Cliquez dessus. Regardez ci-dessous les propriétés de la colonne lorsque la colonne principale est sélectionnée, cliquez sur la liste déroulante Spécification d'identité Il affichera deux lignes avec Non Double-cliquez sur la deuxième, les deux deviendront Oui maintenant enregistrer par Ctrl + S , si cela donne une erreur, vous devez trouver Outils> Options> Concepteur: décochez Empêcher l'enregistrement ... Cliquez sur OK puis sur Enregistrer.


4 Réponses :


1
votes

Vous faites cela lorsque vous créez une table ou via une instruction alter table :

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

Je vous recommande d'ajouter la clé primaire lorsque vous créez la table et avant ajoutez-y des données.


0 commentaires

4
votes
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
);

0 commentaires

4
votes

Commencez par rechercher les doublons par cette colonne.

ALTER TABLE Cars2.dbo.Cartable1 DROP CONSTRAINT ConstraintNameFromThePreviousQuery

Si un enregistrement apparaît, vous devez soit supprimer tous les doublons, soit mettre à jour leurs plaques d'immatriculation afin qu'ils ne se répètent plus.

/ p>

Vous devrez également vérifier les valeurs NULL et les mettre à jour ou les supprimer (la clé primaire ne peut pas être nulle).

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

Ensuite, vous pouvez ajouter la contrainte PRIMARY KEY avec:

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

Vous pourriez obtenir une erreur si LicensePlate peut contenir NULL code > valeurs. Vous pouvez le changer avec un ALTER TABLE :

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

Si vous avez déjà une clé primaire définie sur cette table, vous devrez la supprimer puis créez votre nouvelle (une table ne peut avoir qu'une seule contrainte de clé primaire à la fois). Vous pouvez vérifier lequel est-il avec la requête suivante:

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

Une fois que vous voyez le résultat, vous pouvez supprimer la clé primaire actuelle avec un autre ALTER TABLE code >:

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


3 commentaires

Merci pour cela! Mais maintenant, j'obtiens cette erreur: Msg 1779, niveau 16, état 0, ligne 1 La table «Cartable1» a déjà une clé primaire définie dessus.


J'ai modifié la réponse pour vérifier les clés primaires actuelles.


Merci pour cet EzLo



1
votes
If You already have table with data try this ,


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

0 commentaires