Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

Incorrect syntax near the keyword 'IF'. Expand / Collapse
Author
Message
Posted Wednesday, April 7, 2010 9:29 AM
Valued Member

Valued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued Member

Group: General Forum Members
Last Login: Tuesday, February 25, 2014 12:21 PM
Points: 72, Visits: 159
Incorrect syntax near the keyword 'IF'.
I'm a new SQLServer DBA while trying to wite the code below, I get this error message "Incorrect syntax near the keyword 'IF'." Please help.


declare @trans_num as varchar(10)
declare @student as varchar(10)

select @trans_num = 'E7281649' --Nomination E number
select @student = '45854' --Employee number

--First change the nominee

Update [nominees]
set
[nominee_no_emp]= @student
where id=@trans_num

select * from course_histories where no_sch=(select no_sch from nominations where id=@trans_num) and no_emp=(select nominee_no_emp from nominees where id=@trans_num)
select * from course_history_dtl where no_chd_po=@trans_num

--Second insert COURSE_HISTORIES entry
insert into course_histories (no_emp, cd_crs, no_ch_seq, no_sch, at_cd_fee, cd_ch_enrolby, dt_ch_compdt, qy_crs_ceu, cd_org, nm_lst_updt, dt_lst_updt, tx_ch_suser1, tx_ch_suser2, tx_ch_suser3, tx_ch_suser4, tx_ch_suser5, no_ch_nuser1, no_ch_nuser2, cd_seg)
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.no_sch as 'no_sch',
(case
when nom.ob_tuition is null then '0.0'
else nom.ob_tuition
end) as 'at_cd_fee',
'SYSADM' as 'cd_ch_enrolby',
GETDATE() 'dt_ch_compdt',
nom.duty_hours as 'qy_crs_ceu',
e1.cd_org as 'cd_org',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
e2.tx_emp_suser1 as 'tx_ch_suser1',
e2.ad_emp_add1 + '/' + e2.ad_emp_add2 as 'tx_ch_suser2',
e2.ad_emp_email as 'tx_ch_suser3',
substring(e2.no_emp_phone1,1,3) + substring(e2.no_emp_phone1,5,3) + substring(e2.no_emp_phone1,9,4) as 'tx_ch_suser4',
a.contact_name + '/' + a.contact_phone as 'tx_ch_suser5',
null as 'no_ch_nuser1', --This field mirrors the class number and is vital for completion on training report
replicate('', 6-len(convert(varchar,e2.no_emp_nuser2))) + convert(varchar,e2.no_emp_nuser2) + '.' +
replicate('', 6-len(convert(varchar,e2.no_emp_nuser1))) + convert(varchar,e2.no_emp_nuser1) as 'no_ch_nuser2',
'DWD' as 'cd_seg'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
inner join apprv_group a
on nom.apprv_group_id = a.apprv_group_id
where
nom.id=@trans_num

--Last insert COURSE_HISTORY_DTL entry
insert into course_history_dtl (no_emp, cd_crs, no_ch_seq, no_chd_po, cd_chd_bstat, cd_chd_btype, dt_chd_invoice, no_chd_regauth, cd_chd_pmeth, nm_lst_updt, dt_lst_updt, id_ch, dt_chd_edate)
IF EXISTS (select transaction_date from invoice_log where doc_no=@trans_num)
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.id as 'no_chd_po',
'I' as 'cd_chd_bstat',
'OS' as 'cd_chd_btype',
i.transaction_date as 'dt_chd_invoice',
replicate('', 8-len(convert(varchar,e2.no_emp_nuser3))) + convert(varchar,e2.no_emp_nuser3) as 'no_chd_regauth',
'SYSADM' as 'cd_chd_pmeth',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
(select id_ch + 1 from course_history_dtl where id_ch=(select max(id_ch) from course_history_dtl)) as 'id_ch',
GETDATE() 'dt_chd_edate'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
inner join invoice_log i
on nom.id = i.doc_no
where
nom.id=@trans_num
ELSE
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.id as 'no_chd_po',
'I' as 'cd_chd_bstat',
'OS' as 'cd_chd_btype',
null as 'dt_chd_invoice',
replicate('', 8-len(convert(varchar,e2.no_emp_nuser3))) + convert(varchar,e2.no_emp_nuser3) as 'no_chd_regauth',
'SYSADM' as 'cd_chd_pmeth',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
(select id_ch + 1 from course_history_dtl where id_ch=(select max(id_ch) from course_history_dtl)) as 'id_ch',
GETDATE() 'dt_chd_edate'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
where
nom.id=@trans_num

Post #898639
Posted Wednesday, April 7, 2010 9:39 AM
Hall of Fame

Hall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of Fame

Group: General Forum Members
Last Login: Tuesday, August 19, 2014 10:01 AM
Points: 3,840, Visits: 3,841
The syntax looks fine to me. You are using variables in your SQL, did you declare them first?



John Rowan

======================================================
======================================================
Forum Etiquette: How to post data/code on a forum to get the best help - by Jeff Moden
Post #898667
Posted Wednesday, April 7, 2010 9:51 AM
Valued Member

Valued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued Member

Group: General Forum Members
Last Login: Tuesday, February 25, 2014 12:21 PM
Points: 72, Visits: 159
Thanks. Yes I did actually here is the full syntax, but I still get the error code:

declare @trans_num as varchar(10)
declare @student as varchar(10)

select @trans_num = 'E7281649' --Nomination E number
select @student = '45854' --Employee number

--First change the nominee

Update [nominees]
set
[nominee_no_emp]= @student
where id=@trans_num

select * from course_histories where no_sch=(select no_sch from nominations where id=@trans_num) and no_emp=(select nominee_no_emp from nominees where id=@trans_num)
select * from course_history_dtl where no_chd_po=@trans_num

--Second insert COURSE_HISTORIES entry
insert into course_histories (no_emp, cd_crs, no_ch_seq, no_sch, at_cd_fee, cd_ch_enrolby, dt_ch_compdt, qy_crs_ceu, cd_org, nm_lst_updt, dt_lst_updt, tx_ch_suser1, tx_ch_suser2, tx_ch_suser3, tx_ch_suser4, tx_ch_suser5, no_ch_nuser1, no_ch_nuser2, cd_seg)
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.no_sch as 'no_sch',
(case
when nom.ob_tuition is null then '0.0'
else nom.ob_tuition
end) as 'at_cd_fee',
'SYSADM' as 'cd_ch_enrolby',
GETDATE() 'dt_ch_compdt',
nom.duty_hours as 'qy_crs_ceu',
e1.cd_org as 'cd_org',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
e2.tx_emp_suser1 as 'tx_ch_suser1',
e2.ad_emp_add1 + '/' + e2.ad_emp_add2 as 'tx_ch_suser2',
e2.ad_emp_email as 'tx_ch_suser3',
substring(e2.no_emp_phone1,1,3) + substring(e2.no_emp_phone1,5,3) + substring(e2.no_emp_phone1,9,4) as 'tx_ch_suser4',
a.contact_name + '/' + a.contact_phone as 'tx_ch_suser5',
null as 'no_ch_nuser1', --This field mirrors the class number and is vital for completion on training report
replicate('', 6-len(convert(varchar,e2.no_emp_nuser2))) + convert(varchar,e2.no_emp_nuser2) + '.' +
replicate('', 6-len(convert(varchar,e2.no_emp_nuser1))) + convert(varchar,e2.no_emp_nuser1) as 'no_ch_nuser2',
'DWD' as 'cd_seg'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
inner join apprv_group a
on nom.apprv_group_id = a.apprv_group_id
where
nom.id=@trans_num

--Last insert COURSE_HISTORY_DTL entry
insert into course_history_dtl (no_emp, cd_crs, no_ch_seq, no_chd_po, cd_chd_bstat, cd_chd_btype, dt_chd_invoice, no_chd_regauth, cd_chd_pmeth, nm_lst_updt, dt_lst_updt, id_ch, dt_chd_edate)
IF EXISTS (select transaction_date from invoice_log where doc_no=@trans_num)
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.id as 'no_chd_po',
'I' as 'cd_chd_bstat',
'OS' as 'cd_chd_btype',
i.transaction_date as 'dt_chd_invoice',
replicate('', 8-len(convert(varchar,e2.no_emp_nuser3))) + convert(varchar,e2.no_emp_nuser3) as 'no_chd_regauth',
'SYSADM' as 'cd_chd_pmeth',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
(select id_ch + 1 from course_history_dtl where id_ch=(select max(id_ch) from course_history_dtl)) as 'id_ch',
GETDATE() 'dt_chd_edate'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
inner join invoice_log i
on nom.id = i.doc_no
where
nom.id=@trans_num
ELSE
select
e1.no_emp as 'no_emp',
nom.cd_crs as 'cd_crs',
'1' as 'no_ch_seq',
nom.id as 'no_chd_po',
'I' as 'cd_chd_bstat',
'OS' as 'cd_chd_btype',
null as 'dt_chd_invoice',
replicate('', 8-len(convert(varchar,e2.no_emp_nuser3))) + convert(varchar,e2.no_emp_nuser3) as 'no_chd_regauth',
'SYSADM' as 'cd_chd_pmeth',
'SYSADM' as 'nm_lst_updt',
GETDATE() 'dt_lst_updt',
(select id_ch + 1 from course_history_dtl where id_ch=(select max(id_ch) from course_history_dtl)) as 'id_ch',
GETDATE() 'dt_chd_edate'
from
nominations nom inner join (nominees inner join employees e1 on nominees.nominee_no_emp = e1.no_emp)
on nom.id = nominees.id
inner join employees_dtl e2
on e2.no_emp = e1.no_emp
where
nom.id=@trans_num

Post #898690
Posted Wednesday, April 7, 2010 9:59 AM
Hall of Fame

Hall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of FameHall of Fame

Group: General Forum Members
Last Login: Tuesday, August 19, 2014 10:01 AM
Points: 3,840, Visits: 3,841
Ah, now I see. You cannot use an IF construct with an INSERT statement. Look in BOL for INSERT; it must be INSERT INTO....VALUES or INSERT INTO.....SELECT.



John Rowan

======================================================
======================================================
Forum Etiquette: How to post data/code on a forum to get the best help - by Jeff Moden
Post #898698
Posted Wednesday, April 7, 2010 10:05 AM
Valued Member

Valued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued Member

Group: General Forum Members
Last Login: Tuesday, February 25, 2014 12:21 PM
Points: 72, Visits: 159
Ok, Thanks. I'll try it.
Post #898706
Posted Wednesday, April 7, 2010 10:56 AM
Valued Member

Valued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued MemberValued Member

Group: General Forum Members
Last Login: Tuesday, February 25, 2014 12:21 PM
Points: 72, Visits: 159
I took off the IF before the EXISTS and still got an error message. Any guidance will be appreciated.
Post #898776
Posted Wednesday, April 7, 2010 11:14 AM


SSCrazy Eights

SSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy EightsSSCrazy Eights

Group: General Forum Members
Last Login: Thursday, June 5, 2014 10:54 AM
Points: 9,294, Visits: 9,480
Lookup the syntax for INSERT INTO..SELECT. You cannot put any external qualifications between the INSERT and the SELECT. If you want to filter it you should do that through either the WHERE clause or the ON clause (if it has JOINs).

-- RBarryYoung, (302)375-0451 blog: MovingSQL.com, Twitter: @RBarryYoung
Proactive Performance Solutions, Inc.
"Performance is our middle name."
Post #898789
Posted Wednesday, April 7, 2010 4:02 PM


SSCommitted

SSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommitted

Group: General Forum Members
Last Login: Tuesday, April 22, 2014 9:38 AM
Points: 1,519, Visits: 4,071
You can also move the IF up a line to be before the insert statement. You'll need to add the insert again just below your else.
IE:

IF...
insert...
select...
else...
insert...
select...

That said, there's a good chance that isn't going to do what you want it to do. Hard to say without more information. That exists check is suspect.


Seth Phelabaum
Consistency is only a virtue if you're not a screwup.

Links: How to Post Sample Data :: Running Totals :: Tally Table :: Cross Tabs/Pivots :: String Concatenation
Post #899066
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse