2010-12-23 8 views
1

나는 내가 문 다음 실행하면 내가 오류가 발생했습니다 DBCurrent datebase.So에서 EditEmail 테이블에 DBUsers 데이터베이스에서 EditEmail 테이블에서 일부 데이터를 업데이트 할 메시지 :오류 2005

ERROR: 
Msg 102, Level 15, State 1, Line 2 
Incorrect syntax near 'EN'. 
Msg 156, Level 15, State 1, Line 8 
Incorrect syntax near the keyword 'AS'. 

이 T-SQL의 구문 실수가 있습니까? 당신은 당신이 UPDATE 문 테이블 별칭으로 지정하고 표를 줄 수

+0

을 특정 유형의 하나 이상의 이메일있을 때 나는, 당신은 몇 가지 문제가있다 생각합니다. 업데이트는 그 중 하나의 값을 다른 테이블에 coppy합니다. –

+0

아니요 유형이 고유합니다. – Sukhjeevan

답변

1

(어떤 이유 - 티 - SQL 디자인 팀에게, 이것이 가능하지 않은 이유를 묻지 않는다) ...

대신이 문을보십시오 :

USE DBCurrent 

UPDATE 
    [DBUsers].[dbo].[EditEmail] 
SET 
    MailSubject = E.MailSubject, 
    MailMessage = E.MailMessage 
FROM 
    dbo.EditEmail E 
WHERE 
    DBUsers.dbo.EditEmail.Type = E.Type 
    AND E.Type = 'blahblah' -- or whatever additional conditions you have! 

당신은 예를 들어, 테이블을 지정해야합니다 전체에 업데이트되고 데이터베이스, 스키마, 테이블 및 열 이름은 WHERE 절에 있습니다.

EditMail 테이블을 참조하려면 "인공적"하위 쿼리가 필요하지 않습니다. 그냥 FROM 절에 정의하고 테이블 별칭 (여기서는 지원됨)을 지정하십시오.

+0

reply.one 주셔서 감사합니다. dbo.EditEmail E (egFROM dbo.EditEmail E WHERE Type = 'blahblah ..')에 일부 조건을 적용하려면 구문이 무엇이겠습니까? – Sukhjeevan

+0

@Sukhi : 그냥 AND를 추가하십시오. E.Type = 'blahblah''이 그 WHERE 절에 있습니다. 내 대답 업데이트 ... –

+0

제안 해 주셔서 감사합니다. – Sukhjeevan

0

T-SQL 업데이트 테이블에 별칭을 정의하는 것을 허용하지 않습니다, 이 있지만 별칭 업데이트 할 수 있습니다 :

이 구문을 수정을, 나는 논리가 여전히 개선해야한다 생각합니다. (내가 확인하지 않은) 시도하십시오 :

UPDATE EN 
SET EN.MailSubject = E.MailSubject, 
    EN.MailMessage = E.MailMessage 
FROM [DBUsers].[dbo].[EditEmail] EN 
    join EditEmail E 
on EN.Type = E.Type