2012-11-26 2 views
1

내 질문에 정말 바보 같은 소리가 들리 겠지만, 나는 붙어있다. 다음은 SQL Server에서 수행하려고 시도하는 의사 코드입니다.select id from sql

희망 사항을 제안합니다.

+3

_ "이 코드는 쓸모가 없습니다"_ 예, 질문과 관련이 없기 때문입니다. –

답변

1

사용 변수

declare @foundId int 

select @foundId = id from employee where Email='[email protected]' 

if @foundId is not null 
begin 
    insert in tasks (... @foundId...) 
end 
else 
begin 
    insert in employee value Email='blah'; 
    insert in tasks with new id in employee 
end 
1

Scope_Identity()을 사용하면 마지막으로 삽입 한 키 값을 가져올 수 있습니다.

if exists(select id from employee where Email='[email protected]') 
begin 
    insert tasks(employeeid, task) 
    select id, 'new task' from employee where email = '[email protected]' 
end 
else 
begin 
    insert employee (email) values ('blah'); 
    select @id = Scope_identity(); 
    insert tasks(employeeid, task) values (@id, 'new task') 
end 

NB. Ident_Current 또는 @@Identity을 사용하면 원하지 않는 부작용이 발생하기 쉽습니다. getEmployeeId_byEmail :

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

+2

Scope_Identity는 마지막으로 삽입 된 인덱스를 반환하지 않습니다. –

0
Declare @ID int 
select @ID=id from employee where Email='[email protected]' 
if @ID is null 
begin 
    insert into employee (Email,...) values ('[email protected]',...) 
    Select @ID=ident_Current('employee') 
end 

insert into tasks (employee_ID,...) Values (@ID,..) 
0

는 저장 프로 시저를 형성하기 위해 의사 코드를 사용합니다.

@@Identity으로 새로운 직원 ID를 얻을 것이다 저장 프로 시저의 두 번째 블록은 :

/* untested */ 
insert into employee values(/*what ever*/) 
insert into task(/*what ever*/, @@Identity) 

는보고 here 되세요.

+0

사용자가 작성한 저장 프로 시저에 'sp_'접두사를 사용하지 않으려면 예약 된 접두사를 사용하십시오. http://msdn.microsoft.com/en-us/library/dd172115(v = vs.100) .aspx – fnurglewitz

+0

@ tr3 : 조언 주셔서 감사합니다. –