How to add columns to existing table - database

I am very new to SQL coding, I am using SQL Developer as the software to code.
I have a question, which I have tried to google and figure out but am having trouble.
I create a table called patvisit (patient visit) from two datasets Patient and visit. So I run the code below to create the new table patvisit. However, how do I add new columns with values into patvisit table without dropping the table and rerunning it. For example, I run the code below and create the table patvisit after I make the table I forget that I also wanted to add address that was in the patient table. Now what I would do is drop the patvisit table and then re-run the below code and add another column a.address. But is there a way to use the ALTER or ADD rules to be able to add a new column to an existing table? I tried looking for example codes online but I don't seem to get it. would appreciate any assistance/advise.
create table pativisit as
select distinct a.patientId, b.visit_no, b.visit_code, a.admit_date, a.discharge_date
from Patient a
inner join visit b
on a.visit_no=b.visit_no;
Thank you!

Check out this link on using the SQL ALTER TABLEstatement to ad a column:
https://www.w3schools.com/sql/sql_alter.asp

Related

Cloning a table without importing row data

I need to make a provisionary table (TAB_PROV). This table will have its origin in a main table (TAB_MAIN). I need everything from the main table, except the data (rows).
I searched for some examples and none of them worked for me
CREATE TABLE TAB_PROV LIKE TAB_MAIN
CREATE TABLE TAB_PROV AS TAB_MAIN
You can just simply do:
SELECT *
FROM TAB_MAIN
INTO TAB_PROV
WHERE 1 = 2
Since the WHERE condition will never be true, no data is ever copied - but the table structure is replicated - TAB_PROV is created and has the same column as TAB_MAIN. This does NOT however copy any constraints (check or default constraints) or triggers over - it only recreates the columns (and their datatypes).
If you want a real and complete "copy" of your table, then you should use the "Script Table" function in SSMS to get the SQL needed for TAB_MAIN and then adapt it to create TAB_PROV from it.
In SQL Server Management Studio, you can right-click the table and select
Script Table as -> Create To -> New Query Editor Window
This will create just the table creation script for you.
You can also try the code below but it will copy everything.
SELECT *
INTO NewTable
FROM OldTable
TRUNCATE TABLE NewTable

View from a Join of two tables in SQL Server

Tables to Join
I attached an image explaining issues that I currently face at the moment. I was looking for a way to join two tables. Where first table has a relationship to the previous table that its foreign key in first table. The second table also have foreign key of the first table.
What I want is to output the information is a list of the records of the second table that has the foreign key of the first table as well as the foreign key of the previous table that only linked to first table only.
Thank you very much for your support and I am looking forward to hear from you all soon
If you are using SQL Server, try creating a view function. You can easily add tables and view the sql results after you connect all of them. It also has a built in function that will automatically creates the sql queries corresponding to your created view function.
May you give this a try?
select a.clm,b.clm,c.clm from tableA as a
inner join table b as b on a.clm = b.clm
inner join table c as c on c.clm = b.clm
where clm is the column that could be joined from table A as well as table B as well as table c
If ever, kindly give us a bit more info about

Will Adding an Identity Column to a T-SQL Table Break Anything

I've got a legacy database that has several keyless tables. On one, I'd really just like to throw an Identity column on it so I can use it with Entity Framework. Now, I know I can do this:
alter table MyTable
add Id int identity(1,1)
But as this is an old and hoary beast, I want to make sure it's not going to break anything. I can't imagine how it would break any procs or existing data access (some of which is still in VB 6!) but "cant' imagine" isn't quite the same as "absolutely sure."
I was hoping some experts on databases could give me some guidance here.
If your code has any "Select *" in it, it could break something.
example:
You create a #temp table with 3 columns.
Your table in question has 3 columns.
You use "select * from TheTable" to populate the #temp table.
Now you add a 4th column to the table.
Your code will now try to jam 4 columns into a 3 column #temp table.
Having an IDENTITY column that is not the PrimaryKey could be another snap-fu.

How To change the column order of An Existing Table in SQL Server 2008

I have situation where I need to change the order of the columns/adding new columns for existing Table in SQL Server 2008.
Existing column
MemberName
MemberAddress
Member_ID(pk)
and I want this order
Member_ID(pk)
MemberName
MemberAddress
I got the answer for the same ,
Go on SQL Server → Tools → Options → Designers → Table and Database Designers and unselect Prevent saving changes that require table re-creation
2- Open table design view and that scroll your column up and down and save your changes.
It is not possible with ALTER statement. If you wish to have the columns in a specific order, you will have to create a newtable, use INSERT INTO newtable (col-x,col-a,col-b) SELECT col-x,col-a,col-b FROM oldtable to transfer the data from the oldtable to the newtable, delete the oldtable and rename the newtable to the oldtable name.
This is not necessarily recommended because it does not matter which order the columns are in the database table. When you use a SELECT statement, you can name the columns and have them returned to you in the order that you desire.
If your table doesn't have any records you can just drop then create your table.
If it has records you can do it using your SQL Server Management Studio.
Just click your table > right click > click Design then you can now arrange the order of the columns by dragging the fields on the order that you want then click save.
Best Regards
I tried this and dont see any way of doing it.
here is my approach for it.
Right click on table and Script table for Create and have this on
one of the SQL Query window,
EXEC sp_rename 'Employee', 'Employee1' -- Original table name is Employee
Execute the Employee create script, make sure you arrange the columns in the way you need.
INSERT INTO TABLE2 SELECT * FROM TABLE1.
-- Insert into Employee select Name, Company from Employee1
DROP table Employee1.
Relying on column order is generally a bad idea in SQL. SQL is based on Relational theory where order is never guaranteed - by design. You should treat all your columns and rows as having no order and then change your queries to provide the correct results:
For Columns:
Try not to use SELECT *, but instead specify the order of columns in the select list as in: SELECT Member_ID, MemberName, MemberAddress from TableName. This will guarantee order and will ease maintenance if columns get added.
For Rows:
Row order in your result set is only guaranteed if you specify the ORDER BY clause.
If no ORDER BY clause is specified the result set may differ as the Query Plan might differ or the database pages might have changed.
Hope this helps...
This can be an issue when using Source Control and automated deployments to a shared development environment. Where I work we have a very large sample DB on our development tier to work with (a subset of our production data).
Recently I did some work to remove one column from a table and then add some extra ones on the end. I then had to undo my column removal so I re-added it on the end which means the table and all references are correct in the environment but the Source Control automated deployment will no longer work because it complains about the table definition changing.
The real problem here is that the table + indexes are ~120GB and the environment only has ~60GB free so I'll need to either:
a) Rename the existing columns which are in the wrong order, add new columns in the right order, update the data then drop the old columns
OR
b) Rename the table, create a new table with the correct order, insert to the new table from the old and delete from the old as I go along
The SSMS/TFS Schema compare option of using a temp table won't work because there isn't enough room on disc to do it.
I'm not trying to say this is the best way to go about things or that column order really matters, just that I have a scenario where it is an issue and I'm sharing the options I've thought of to fix the issue
SQL query to change the id column into first:
ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST;
or by using:
ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT AFTER 'column_name'

Add a column to specific position in MSSQL Server

ALTER TABLE Log ADD log_id bigint IDENTITY BEFORE cust_id_fk
The above code adds a new column to last position. I want it to be added to the first position. Also I want to make it as Primary Key.
You would need to drop the table and recreate it with the columns in the correct order. If you make the table changes in SSMS then it can generate a change script for you which you could then use to deploy the change to a production server.
Even if the question is old, a more accurate about Management Studio would be required.
You can create the column manually or with Management Studio. But Management Studio will require to recreate the table and will result in a time out if you have too much data in it already, avoid unless the table is light.
To change the order of the columns you simply need to move them around in Management Studio. This should not require (Exceptions most likely exists) that Management Studio to recreate the table since it most likely change the ordination of the columns in the table definitions.
I've done it this way on numerous occasion with tables that I could not add columns with the GUI because of the data in them. Then moved the columns around with the GUI of Management Studio and simply saved them.
You will go from an assured time out to a few seconds of waiting.
In MSSMS select the table in the object explorer. Right click and select modify.
That will bring a new tab where you can drag the columns into a new default order.
Save and presto! Done.
Steps:
Rename the original table to tablename_temp
create a new table containing the new column
insert into tablename select * from tablename_temp
recreate foreign keys and other constraint on the new table
Short answer: It's not possible.
But you may try these steps:
Right click table name on object explorer
Click tasks
Click drop and create table
Add your columns in the position you want to add them
If you have data. Copy the data and paste it on an Excel spreadsheet, edit the spreadsheet to include new columns,edit top 100 rows and paste the data back into the table.
Goodluck
According to Change Column Order in a Table, this operation is not supported using the Transact-SQL statement.
You have to create another table and copy the data. But have a look at "ordinal position" and try to update it ?
SELECT
ORDINAL_POSITION
,COLUMN_NAME
,DATA_TYPE
,CHARACTER_MAXIMUM_LENGTH
,IS_NULLABLE
,COLUMN_DEFAULT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Product'
ORDER BY
ORDINAL_POSITION ASC;
Primary key is another question for which you may find lots of answers.

Resources