2013-04-16 4 views
1

У меня есть таблица с именем employee со следующими столбцами:как вставить ImagePath в таблице

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

Я хочу, чтобы вставить empid, empname и imagepath где имя изображения должно быть значение автоинкрементного ид как ~/images/1.jpg (здесь 1 автоинкрементный идентификатор этой строки)

это идеальный код или нет ???

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

Вы можете написать триггер, чтобы делать то, что вы хотите. –

+0

спасибо, но могу привести пример? ? –

ответ

3

Это не идеальный код, потому что MAX (ID) +1 может отличаться от следующего значения Auto increment. Вы можете использовать функцию IDENT_CURRENT

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

спасибо за сообщение –

1

вставки в работник (имя, путь) значений ('sarju', (выберите '~/изображения /' + роли (ISNULL (макс (EmpId), 0) + 1, как VARCHAR (50)) + «.jpg» от ЭМИ))

да, это возможно

1

я могу получить dinged за это, потому что многие люди не любят триггерами, но это прекрасный пример того, что они были построены для (и я честно хочу, чтобы мир знал это):

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!

0

Edit: Хотя эту работу, я должен сказать, что решение Ненад Zivkovics лучше.

Вы можете использовать SCOPE_IDENTITY(), чтобы получить последний созданный идентификатор. Это также было бы безопаснее, так что вы не получите неправильный идентификатор.

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 
+0

Могу ли я вставить запись, используя один запрос? –

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') 
+0

в случае insert различие значение в столбце пути изображения тогда ?? –

+0

спасибо за сообщение –

+0

да, он будет использовать ваш автоинкрементный 'empid' –

Смежные вопросы