1

我有一个用以employee下列命名的表:

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

我想插入empid, empname, 并且imagepath图像名称应该是自动递增 id 的值,例如~/images/1.jpg(这里 1 是该行的自动递增 id)

这是不是完美的代码???

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

5 回答 5

3

这不是一个完美的代码,因为 MAX(ID)+1 可能与下一个自动增量值不同。您可以使用 IDENT_CURRENT 函数

INSERT INTO employee (name,path) 
SELECT 'sarju','~/images/'+CAST(IDENT_CURRENT('employee') AS VARCHAR(50))+'.jpg'
于 2013-04-16T13:45:29.987 回答
1

插入员工(姓名,路径)值('sarju',(从emp中选择'~/images/'+Cast(ISNULL(max(empid),0)+1 as varchar(50))+'.jpg') )

是的,这是可能的

于 2013-04-16T13:38:34.953 回答
1

我可能会对此感到厌烦,因为很多人不喜欢触发器,但这是一个完美的例子,说明它们的目的是什么(我真的希望全世界都知道这一点):

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)

它们确实是有目的的,而像这样的事情正是如此。看,你只需要INSERT员工的名字,它TRIGGER就会自动运行。老实说,这是处理这个问题的最直接的方法。这样做的另一个好处 - 如果您批量插入一群员工或从 Management Studio 运行插入语句,触发器仍然运行!你不需要挖掘那个疯狂的INSERT声明!

于 2013-04-16T13:39:31.527 回答
0

编辑:虽然这项工作,我不得不说 Nenad Zivkovics 解决方案更好。

您可以使用 SCOPE_IDENTITY() 来获取最新创建的 ID。这也会更安全,这样您就不会得到错误的 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
于 2013-04-16T13:47:59.567 回答
0

如果您只有一个特定文件夹将存储您的图像,您可以将您的字段设置imagepath为计算

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')
于 2013-04-16T13:48:27.713 回答