如何在表中插入imagepath

时间:2013-04-16 13:20:12

标签: c# asp.net sql sql-server

我有一个名为employee的表,其中包含以下列:

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

我想插入empidempnameimagepath,其中图片名称应为自动增量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)
)

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

插入员工(名称,路径)值('sarju',(选择'〜/ images /'+ Cast(ISNULL(max(empid),0)+1作为varchar(50))+'。jpg'来自emp))

是的,这是可能的

答案 2 :(得分: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陈述!

答案 3 :(得分: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

答案 4 :(得分: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')