sbenderli
sbenderli

Reputation: 3794

SQL: How to use a column that was just added

I am trying to add 2 columns and then I would like to set some values to them but I get a compile-error saying the column does not exist. I am using the following script:

IF @LogProcessed = 0
Begin

IF NOT EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'SYSTM_FRM' and column_name = 'SF_Ip_TXT')
ALTER TABLE SYSTM_FRM add SF_Ip_TXT NVARCHAR(20)

IF NOT EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'SYSTM_FRM' and column_name = 'SF_Port_NUM')
ALTER TABLE SYSTM_FRM add SF_Port_NUM int


IF  (EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'FRM' and column_name = 'FRM_Ip_TXT') AND
    EXISTS (select column_name from INFORMATION_SCHEMA.columns where table_name = 'FRM' and column_name = 'FRM_Ip_TXT'))
begin
Update dbo.SYSTM_FRM
SET     dbo.SYSTM_FRM.SF_Ip_TXT = dbo.FRM.FRM_Ip_TXT,
        dbo.SYSTM_FRM.SF_Port_NUM = dbo.FRM.FRM_Port_NUM

FROM dbo.FRM INNER JOIN dbo.SYSTM_FRM ON dbo.FRM.FRM_RCRD_NUM = dbo.SYSTM_FRM.SF_FrameRecord_NUM          

ALTER TABLE FRM DROP COLUMN FRM_Ip_TXT
ALTER TABLE FRM DROP COLUMN FRM_Port_NUM  
  end


Update [Update_Log]
Set Update_Log_Processed = 1
Where [Update_Log_Version] = '00001'

end

Is there any way to use a column that I am adding in the same script?

Upvotes: 4

Views: 298

Answers (3)

SQLMenace
SQLMenace

Reputation: 135021

you cannot save it in a proc like that

example

create table TestAdd2 (id int)
go

You cannot create this procedure

create proc prTest as

insert TestAdd2 values (1)

exec ('ALTER TABLE TestAdd2 add SF_Port_NUM int')

update TestAdd2 set id = 1,SF_Port_NUM = 2

select * from TestAdd2

GO

You get this error Msg 207, Level 16, State 1, Procedure prTest, Line 7 Invalid column name 'SF_Port_NUM'.

This is because at parse time the column does not exist

However if you use dynamic SQL for the update you are good to go

create proc prTest2 as

insert TestAdd2 values (1)

exec ('ALTER TABLE TestAdd2 add SF_Port_NUM int')

exec ('update TestAdd2 set id = 1,SF_Port_NUM = 2')

select * from TestAdd2

GO

in your case your update statement would be

exec('Update dbo.SYSTM_FRM
SET     dbo.SYSTM_FRM.SF_Ip_TXT = dbo.FRM.FRM_Ip_TXT,
        dbo.SYSTM_FRM.SF_Port_NUM = dbo.FRM.FRM_Port_NUM
FROM dbo.FRM INNER JOIN dbo.SYSTM_FRM 
ON dbo.FRM.FRM_RCRD_NUM = dbo.SYSTM_FRM.SF_FrameRecord_NUM')

Upvotes: 4

Madhivanan
Madhivanan

Reputation: 13700

All DDL statements should follow the statement seperator GO in order to make use of it

Upvotes: 0

Glennular
Glennular

Reputation: 18215

Put a GO in between

Upvotes: 4

Related Questions