Log in
::
Register
::
Not logged in
Home
Tags
Articles
Editorials
Stairways
Forums
Scripts
Videos
Blogs
QotD
Books
Ask SSC
SQL Jobs
Training
Authors
About us
Contact us
Newsletters
Write for us
Recent Posts
Recent Posts
Popular Topics
Popular Topics
Home
Search
Members
Calendar
Who's On
Home
»
SQL Server 7,2000
»
T-SQL
»
Incorrect syntax near the keyword 'IF'.
Incorrect syntax near the keyword 'IF'.
Rate Topic
Display Mode
Topic Options
Author
Message
mashikoo
mashikoo
Posted Wednesday, April 07, 2010 9:29 AM
Valued Member
Group: General Forum Members
Last Login: Tuesday, August 28, 2012 6:43 AM
Points: 70,
Visits: 145
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
John Rowan
John Rowan
Posted Wednesday, April 07, 2010 9:39 AM
Hall of Fame
Group: General Forum Members
Last Login: Tuesday, January 29, 2013 10:54 AM
Points: 3,837,
Visits: 3,821
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
mashikoo
mashikoo
Posted Wednesday, April 07, 2010 9:51 AM
Valued Member
Group: General Forum Members
Last Login: Tuesday, August 28, 2012 6:43 AM
Points: 70,
Visits: 145
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
John Rowan
John Rowan
Posted Wednesday, April 07, 2010 9:59 AM
Hall of Fame
Group: General Forum Members
Last Login: Tuesday, January 29, 2013 10:54 AM
Points: 3,837,
Visits: 3,821
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
mashikoo
mashikoo
Posted Wednesday, April 07, 2010 10:05 AM
Valued Member
Group: General Forum Members
Last Login: Tuesday, August 28, 2012 6:43 AM
Points: 70,
Visits: 145
Ok, Thanks. I'll try it.
Post #898706
mashikoo
mashikoo
Posted Wednesday, April 07, 2010 10:56 AM
Valued Member
Group: General Forum Members
Last Login: Tuesday, August 28, 2012 6:43 AM
Points: 70,
Visits: 145
I took off the IF before the EXISTS and still got an error message. Any guidance will be appreciated.
Post #898776
RBarryYoung
RBarryYoung
Posted Wednesday, April 07, 2010 11:14 AM
SSCrazy Eights
Group: General Forum Members
Last Login: Saturday, May 04, 2013 11:13 AM
Points: 9,855,
Visits: 9,374
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
Garadin
Garadin
Posted Wednesday, April 07, 2010 4:02 PM
SSCommitted
Group: General Forum Members
Last Login: Wednesday, November 07, 2012 4:08 PM
Points: 1,525,
Visits: 4,047
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 »
Permissions
You
cannot
post new topics.
You
cannot
post topic replies.
You
cannot
post new polls.
You
cannot
post replies to polls.
You
cannot
edit your own topics.
You
cannot
delete your own topics.
You
cannot
edit other topics.
You
cannot
delete other topics.
You
cannot
edit your own posts.
You
cannot
edit other posts.
You
cannot
delete your own posts.
You
cannot
delete other posts.
You
cannot
post events.
You
cannot
edit your own events.
You
cannot
edit other events.
You
cannot
delete your own events.
You
cannot
delete other events.
You
cannot
send private messages.
You
cannot
send emails.
You
may
read topics.
You
cannot
rate topics.
You
cannot
vote within polls.
You
cannot
upload attachments.
You
may
download attachments.
You
cannot
post HTML code.
You
cannot
edit HTML code.
You
cannot
post IFCode.
You
cannot
post JavaScript.
You
cannot
post EmotIcons.
You
cannot
post or upload images.
Copyright © 2002-2013 Simple Talk Publishing. All Rights Reserved.
Privacy Policy.
Terms of Use.
Report Abuse.