comment insert un imagepath dans une table

J'ai une table nommée employee avec les colonnes suivantes:

 empid int (autoincrement,PK), empname varchar, imagepath varchar 

Je veux insert empid , empname , et imagepath où le nom de l'image doit être la valeur de l'auto-incrément id comme ~/images/1.jpg (ici 1 est l'ID auto-incrémenté de cette ligne)

c'est un code parfait ou pas ???

 insert into employee (name, path) values ( 'sarju', (select '~/images/'+Cast(ISNULL(max(empid),0)+1 as varchar(50))+'.jpg' from emp) ) 

Ce n'est pas un code parfait car MAX (ID) +1 peut être différent de la prochaine valeur d'incrémentation automatique. Vous pouvez utiliser la fonction IDENT_CURRENT

 INSERT INTO employee (name,path) SELECT 'sarju','~/images/'+CAST(IDENT_CURRENT('employee') AS VARCHAR(50))+'.jpg' 

insert dans les valeurs employee (nom, path) ('sarju', (select '~ / images /' + Cast (ISNULL (max (empid), 0) +1 comme varchar (50)) + '. jpg' depuis emp) )

oui, c'est possible

Je peux me méfier de cela parce que beaucoup de gens n'aiment pas les triggersurs, mais c'est un exemple parfait de ce pour quoi ils ont été construits (et je veux honnêtement que le monde le sache):

 CREATE TRIGGER update_imagepath ON dbo.employee FOR insert AS UPDATE employee SET imagepath = '~/images/' + CAST((SELECT empid FROM inserted) AS VARCHAR) + '.jpg' WHERE empid = (SELECT empid FROM inserted) 

ils servent un but, et les choses comme ceci sont exactement cela. Vous voyez, il vous suffit d' INSERT le nom de l'employé et le TRIGGER s'exécutera automatiquement. C'est honnêtement le moyen le plus simple de gérer cela. L'autre avantage de ceci – si vous avez inséré en masse un tas d'employés ou avez exécuté des instructions d'insertion à partir de Management Studio, le triggersur fonctionne toujours! Vous n'avez pas besoin de creuser cette instruction INSERT fou!

Edit: Pendant ce travail, je dois dire que la solution de Nenad Zivkovics est meilleure.

Vous pouvez utiliser SCOPE_IDENTITY () pour get le dernier ID créé. Ce serait également plus sûr de sorte que vous n'obteniez pas le mauvais ID.

 insert into employee (name) values ( 'sarju') declare @employeeId as int = SCOPE_IDENTITY() update employee set path = '~/images/' + cast(@employeeId as varchar(50)) + '.jpg' where empid = @employeeId 

Si vous ne disposez que d'un dossier spécifique où seront stockées vos images, vous pouvez simplement faire en sorte que votre imagepath champ imagepath calculé

 CREATE TABLE employee ( empid int IDENTITY(1,1) NOT NULL, empname VARCHAR(50) NOT NULL, imagepath AS ('~/images/'+cast(empid AS VARCHAR(50))+'.jpg') ) INSERT INTO employee (empname) VALUES ('sarju') INSERT INTO employee (empname) VALUES ('sarju2')