I have several tables which are worked on within a development environment, then moved to production. If they don't already exist in production, it's fine to just generate the table creation script from SSMS and run it. However, there are occasions where the table already exists in production but all that's needed is an extra column or constraint. The problem is knowing exactly what has changed.

Is there a way to get SQL to compare my `CREATE TABLE` statement against the existing table and only apply what has changed? Essentially I am trying to do the below and SQL correctly complains that the table exists already. 

I would have to manually write an `ALTER` query which on a real example would be difficult due to the sheer volume of columns. Is there a better / easier way to see what has changed? Note that this involves two separate database servers.

```
CREATE TABLE suppliers
( supplier_id int NOT NULL,
  supplier_name char(50) NOT NULL,
  contact_name char(50),
  CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE suppliers
( supplier_id int NOT NULL,
  supplier_name char(50) NOT NULL,
  contact_name char(50),
  contact_number char(20), --this has been added
  CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);

```

Also, dropping and recreating wouldn't be a possibility because data would be lost.