2016-06-18 3 views
0

큰 SQL 쿼리의 일부로 다른 임시 테이블의 관련 항목을 저장할 임시 테이블을 만듭니다. insert 문의 select 부분은 CASE 문을 사용하여 dataSource 열의 값을 기반으로 1 또는 0으로 최종 열 (labSample)을 채 웁니다. SSMS는 labSample 열의 dataSource을 참조하여 잘못된 열 오류를 반환합니다. 나는 내 인생이이 오류가 발생하는 이유를 생각해 내지 못한다. 이것은 문법 오류인가 아니면 그냥 놓친 것인가? 밑줄없는 열 이름 (만 #related 테이블에 dataSourcelabSample 열 제외) #temp_trace 테이블에서 발생하면서 SQL Server 2008 CASE 문에 잘못된 열 오류가 발생했습니다.

이하 사용되는 명명 규칙

은 열 이름 앞에 밑줄이 #related 테이블에 새로운 열되어있다.

정말이 도움말에 조금 감사드립니다!

create table #related (_tr_id int, _mp_id int, _sta_id int, _tr_number_s nvarchar(20), 
    _tr_tstamp_ts datetime, _tr_team_s nvarchar(100), _tr_comment_s nvarchar(512), 
    _kld_id_medium int, _kld_id_reason int, _kld_id_typeofsmpl int, _sp_id int, 
    _sa_id int, _sa_depth_fl float, _fr_number_l int, dataSource nvarchar(128), labSample bit) 

insert into #related (_tr_id, _mp_id, _sta_id, _tr_number_s, 
    _tr_tstamp_ts, _tr_team_s, _tr_comment_s, 
    _kld_id_medium, _kld_id_reason, _kld_id_typeofsmpl, _sp_id, _sa_id, _sa_depth_fl, 
    _fr_number_l, dataSource, labSample) 
select 
    tt.tr_id as _tr_id, 
    tt.mp_id as _mp_id, 
    tt.sta_id as _sta_id, 
    tt.tr_number_s as _tr_number_s, 
    tt.tr_tstamp_ts as _tr_tstamp_ts, 
    tt.tr_team_s as _tr_team_s, 
    tt.tr_comment_s as _tr_comment_s, 
    tt.kld_id_medium as _kld_id_medium, 
    tt.kld_id_reason as _kld_id_reason, 
    tt.kld_id_typeofsmpl as _kld_id_typeofsmpl, 
    sp.sp_id as _sp_id, 
    sa.sa_id as _sa_id, 
    sa.sa_depth_fl as _sa_depth_fl, 
    fr.fr_number_l as _fr_number_l, 
    kd.kld_value_s as dataSource, 
    case dataSource 
     when 'Field' then 0 
     when 'Unknown' then 0 
     else 1 
    end 
from #temp_trace tt 
    inner join spot sp on sp.tr_id = tt.tr_id 
    inner join sample sa on sa.sp_id = sp.sp_id 
    inner join fraction fr on fr.sa_id = sa.sa_id 
    inner join kld_data kd on kd.kld_id = fr.kld_id_datasource 
where mp_id = @tr_mp_id and 
    sta_id = @tr_sta_id and 
    CAST(tr_tstamp_ts as DATE) = CAST(@tr_tstamp_ts as DATE) 

답변

2

내가 이해하는 한, dataSource은 가입 테이블의 열 이름이 아닙니다. 실제로 kd.kld_value_s이라는 별칭입니다. 다음과 같이 사례를 변경해야합니다.

+0

감사합니다. @Mahedi. 매력처럼 일했습니다. 나는'dataSource'를 이미'# related' 테이블에있는 컬럼으로 선언했기 때문에 case 문에서 접근 할 수있을 것이라고 생각했지만 분명히 착각했습니다! –

0

시도해주세요. 도움이 될 수도 있습니다.

CASE WHEN kd.kld_value_s = 'Field' THEN 0 
     WHEN kd.kld_value_s = 'Unknown' THEN 0 
     ELSE 1 
END AS dataSource 
관련 문제