해당 오류는 MERGE 문에서 WHEN NOT MATCHED THEN 절 뒤에 오는 INSERT 문에서 값을 지정할 때 컬럼명을 생략하여 발생할 수 있습니다.
이 문제를 해결하려면 INSERT 문에서 명시적으로 컬럼을 지정하거나, VALUES 키워드를 생략하고 SELECT 절을 사용하여 값을 지정하면 됩니다.
다음은 INSERT 문에서 컬럼을 명시적으로 지정하여 해결하는 방법입니다.
sqlCopy code
DECLARE @tbl_mail_temp TABLE (mail_sn BIGINT, to_user_sn BIGINT, mail_type TINYINT, send_date DATETIME, mail_state TINYINT, mail_title_idx INT, mail_text_idx INT, due_date DATETIME) MERGE INTO dbo.tbl_system_mail_to_all_state AS a USING @tbl_mail_temp AS b ON (a.mail_sn = b.mail_sn) WHEN NOT MATCHED THEN INSERT (mail_sn, to_user_sn, mail_state) VALUES (b.mail_sn, @user_sn, 2);
위 예제에서는 INSERT 문에서 mail_sn, to_user_sn, mail_state 컬럼을 명시적으로 지정하였습니다. 따라서 오류가 발생하지 않습니다.
만약 VALUES 키워드를 생략하고 SELECT 절을 사용하여 값을 지정하려면 다음과 같이 작성할 수 있습니다.
sqlCopy code
DECLARE @tbl_mail_temp TABLE (mail_sn BIGINT, to_user_sn BIGINT, mail_type TINYINT, send_date DATETIME, mail_state TINYINT, mail_title_idx INT, mail_text_idx INT, due_date DATETIME) MERGE INTO dbo.tbl_system_mail_to_all_state AS a USING @tbl_mail_temp AS b ON (a.mail_sn = b.mail_sn) WHEN NOT MATCHED THEN INSERT (mail_sn, to_user_sn, mail_state) SELECT b.mail_sn, @user_sn, 2;
위 예제에서는 VALUES 대신 SELECT 절을 사용하여 값을 지정하였습니다. SELECT 절에서는 컬럼명을 명시적으로 지정하지 않아도 됩니다.