Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 963769
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T01:43:17+00:00 2026-05-16T01:43:17+00:00

I tried to google it, but din’t find a way I have a t-sql

  • 0

I tried to google it, but din’t find a way

I have a t-sql script that adds a new column to a table, then fills that columns with values depending on some other columns in the same table and finally removes some columns. This all works fine.

The problem occures when I want to run the script again. I have a if clause that checks if the missing columns exists, but SSMS still complains and displays error messaged even though the code inside the if clause if not run. The script must be able to run more then once, and I don’t want the error messages to be displayed!

In code (obviously test code, don’t want to dump production code here…):

create table test (
 Name text,
 Switch int,
 ValueA int,
 ValueB int)
go

insert into test values ('Name', 0, 5, 10)

if not exists (select 1 from INFORMATION_SCHEMA.COLUMNS
      where COLUMN_NAME = 'ValueC' and TABLE_NAME = 'test')
begin
 alter table test
 add ValueC int
end
go

-- This batch rasies error when run more then once!
if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
     where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
 update test
 set ValueC = (select case Switch
      when 0 then (select (ValueA - ValueB))
      when 1 then (select (ValueB - ValueA))
     end)
end
go

if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
     where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
begin
 alter table test drop column ValueA
end
go

select * from test
--Name 0 10 -5

Here is the error message:

Msg 207, Level 16, State 1, Line 6
Invalid column name 'ValueA'.
Msg 207, Level 16, State 1, Line 7
Invalid column name 'ValueA'.

Cheers
–Jocke

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T01:43:17+00:00Added an answer on May 16, 2026 at 1:43 am

    Yes it is possible without dynamic SQL but with a bit of a kludgey workaround. I would just use EXEC for this.

    The behaviour in SQL 2000 is explained here

    Erland Sommarskog mentions “once all tables in a query exist, SQL Server performs full checks on the query.”

    So by adding a no-op reference in the query to a table that doesn’t exist compilation can be deferred. With this adjustment the script below can be run multiple times without getting the error.

    insert into test values ('Name', 0, 5, 10)
    
    if not exists (select 1 from INFORMATION_SCHEMA.COLUMNS
          where COLUMN_NAME = 'ValueC' and TABLE_NAME = 'test')
    begin
     alter table test
     add ValueC int
    end
    go
    
    create table #dummy
    (i int)
    
    -- This batch raised error when run more then once!
    if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
         where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
    begin
     update test
     set ValueC = (select case Switch
          when 0 then (select (ValueA - ValueB))
          when 1 then (select (ValueB - ValueA))
         end) where not exists(select * from #dummy)
    end
    
    drop table #dummy
    go
    
    
    if exists (select 1 from INFORMATION_SCHEMA.COLUMNS
         where COLUMN_NAME = 'ValueA' and TABLE_NAME = 'test')
    begin
     alter table test drop column ValueA
    end
    
    
    
    go
    
    
    select * from test
    --Name 0 10 -5
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have found this example on StackOverflow: var people = new List<Person> { new
There doesn't seem to be any tried and true set of best practices to
I want to use a temp directory that will be unique to this build.
I am trying to redirect to a specific path based on HTTP_HOST or SERVER_NAME
I am playing with TFS 2010, and am trying to setup a build process

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.