我有一个名为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)
)
答案 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')