INSERT INTO nouveau paramètre de table Primary Key

J'ai une command SQL qui convertit des secondes en HH: MM: SS. Il crée de nouvelles tables car il obtient les secondes de la table d'origine. Est-il possible de définir la key primaire de la colonne de nom lors de la création des nouvelles tables? Voici le SQL que j'utilise:

SELECT main.[Name], RIGHT('0' + CAST(main.[Staffed Time] / 3600 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST((main.[Staffed Time] / 60) % 60 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST(main.[Staffed Time] % 60 AS VARCHAR), 2) AS StaffedTime, RIGHT('0' + CAST(main.[Time in Break] / 3600 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST((main.[Time in Break] / 60) % 60 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST(main.[Time in Break] % 60 AS VARCHAR), 2) AS BreakTime, RIGHT('0' + CAST(main.[Time in Lunch] / 3600 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST((main.[Time in Lunch] / 60) % 60 AS VARCHAR), 2) + ':' + RIGHT('0' + CAST(main.[Time in Lunch] % 60 AS VARCHAR), 2) AS LunchTime INTO DailyReport FROM main 

Je sais que je pourrais faire une autre command alter table qui me l'assignera comme ceci:

 ALTER TABLE main ADD PRIMARY KEY (Name) 

J'espérais qu'il y avait un moyen de mettre le PK en place dès sa création, est-ce possible?

Avant d'insert des données, essayez de créer une nouvelle variable de table avec le paramètre PRIMARY KEY . Essayez le code ci-dessous

 CREATE TABLE DailyReport ( ID INT Primary Key IDENTITY(1,1), [Name] NVARCHAR(30) , StaffedTime NVARCHAR(30), BreakTime NVARCHAR(30), LunchTime NVARCHAR(30) ) INSERT INTO DailyReport SELECT main.[Name], RIGHT('0' + CAST(main.[Staffed Time] / 3600 AS VARCHAR),2) + ':' + RIGHT('0' + CAST((main.[Staffed Time] / 60) % 60 AS VARCHAR),2) + ':' + RIGHT('0' + CAST(main.[Staffed Time] % 60 AS VARCHAR),2) AS StaffedTime, RIGHT('0' + CAST(main.[Time in Break] / 3600 AS VARCHAR),2) + ':' + RIGHT('0' + CAST((main.[Time in Break] / 60) % 60 AS VARCHAR),2) + ':' + RIGHT('0' + CAST(main.[Time in Break] % 60 AS VARCHAR),2) AS BreakTime, RIGHT('0' + CAST(main.[Time in Lunch] / 3600 AS VARCHAR),2) + ':' + RIGHT('0' + CAST((main.[Time in Lunch] / 60) % 60 AS VARCHAR),2) + ':' + RIGHT('0' + CAST(main.[Time in Lunch] % 60 AS VARCHAR),2) AS LunchTime FROM main SELECT * FROM DailyReport 

Essaye ça…

 ALTER TABLE DailyReport ADD CONSTRAINT PK_Name PRIMARY KEY (Name); 

Il n'y a aucun moyen de créer primary key constraint automatiquement. Toi non plus:

  • créer explicitement une table avec PRIMARY KEY définie et avoir un INSERT … INTO

OU

  • utilisez SELECT INTO table et modifiez-le en ajoutant la contrainte PK ( ALTER TABLE ... ADD CONSTRAINT PK_tablename PRIMARY KEY (col_name) )

Astuce: essayez toujours d'utiliser des contraintes nommées, car il est beaucoup plus facile de les changer (les supprimer) si le nom est corrigé (pas de server)