sql - update two key columns without conflict - sql-server

I want to to update a column from table patient, and add a prefix before all its fields, like
update patient
set contactdetailsID = '99999'+ contactdetailsID
where patient.id = 5294
So, row with id = 5294, will have the same value in column contactdetailsID with prefix 99999.
Before | After
012345 99999012345
the issue i am facing is that patient.contactdetailsID is the foreign key for another table "contactdetails".
So i get the following error.
Msg 547, Level 16, State 0, Line 1 UPDATE statement conflicted with
COLUMN FOREIGN KEY constraint 'ContactDetails_Patient_FK1'. The
conflict occurred in database 'A', table 'ContactDetails',
column 'id'. The statement has been terminated.
(0 row(s) affected)
How can i make that change? I want to change both patient.contactdetailsID and its key Contactdetails.ID, with the same prefix in order not to lose the connection between them.

You can temporary disable the Foreign-Key Constraint using:
ALTER TABLE *Tablename*
NOCHECK CONSTRAINT *ForeinKey_Name*;
and update both the ContactDetails Table and Patient Table.
But make sure that you enable the ForeignKey afterwards!
To enable a Foreign Key use
ALTER TABLE *Tablename*
CHECK CONSTRAINT *ForeinKey_Name*;

You could implement ON UPDATE CASCADE in your table.
see MySQL documentation

Related

How to delete a column which is the primary key in SQL Server

I'm getting an error while trying to delete the primary key column from the table.
id - primary key column
Table OLTMS_0B8DF2
Query
ALTER TABLE OLTMS_0B8DF2
DROP CONSTRAINT id;
GO
Error
Msg 3728, Level 16, State 1, Line 1
'id' is not a constraint.
Msg 3727, Level 16, State 0, Line 1
Could not drop constraint. See previous errors.
You need to specify the existing constraint name rather than the column name to drop the constraint.
You can determine the PK constraint name using the SSMS object browser or with the T-SQL script below. A best practice is to explicitly name constraints (e.g. PK_OLTMS_0B8DF2) rather than rely on auto-generated constraint names. That makes subsequent DDL easier.
SELECT name
FROM sys.key_constraints AS pk
WHERE
pk.parent_object_id = OBJECT_ID(N'OLTMS_0B8DF2')
AND type = 'PK';
If you have foreign key constraints referencing the table, you'll need to similarly drop those too.

how to add foreign key to Azure SQL DB Table

I am stumped by an Add Constraint Foreign Key error I am encountering.
I just created TableA with a Primary Key on PLAN_ID. The table contains zero records. I am attemtpting to execute:
alter table TableB
add constraint FK_TASK_PLAN Foreign Key (TASK_PLAN_ID)
references TableA (PLAN_ID)
Which keeps returning
"Msg 547, Level 16, State 0, Line 5. The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_TASK_PLAN". The conflict occurred in database "DT_Worklist", table "dbo.TableA", column 'PLAN_ID'.
This essentially seems to be telling me I cannot create an FK on the specified column.
What am I doing wrong which is preventing me from creating this Foreign Key? Is it OK my Parent Table is empty or does it need at least one record? What about the FK column; does it need to be Not Null or does it need to have at least 1 record?
Actually, I think I figured this out... My PARENT Table which I just created is empty while my CHILD Table which was created * populated about a week ago already has values in the FK column. So there is no way to create the PK/FK relationship when the FK already contains values.....

Column is not the same data type as referencing column

I'm altering table to add a foreign key as following:
ALTER TABLE [MS_Test].[dbo].[Studies]
ADD CONSTRAINT F_Id
FOREIGN KEY (Id) REFERENCES [M_Test].[dbo].[MS](Id);
I get the following error:
Msg 1778, Level 16, State 0, Line 2
Column 'MS_Test.dbo.FM.Id' is not the same data type as referencing column 'Studies.Id' in foreign key 'F_Id'.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint or index. See previous errors.
I have already a lot of data stored in my tables so I can't just drop table and create it again.
SQL has the following command:
ALTER TABLE [table] ALTER COLUMN [column] SET DATA TYPE [new data type]
EDIT
As you modified the question, it seems that you need to add a new column, instead of changing an existing one.
Try something like this:
ALTER TABLE [MS_Test].[dbo].[Studies]
ADD COLUMN MS_id {your [MS_Test].[dbo].[MS].Id column type};
ALTER TABLE [MS_Test].[dbo].[Studies]
ADD CONSTRAINT F_Id
FOREIGN KEY (MS_id) REFERENCES [M_Test].[dbo].[MS](Id);

How do I get rid off error on adding Foreign Key to a table which contains data

I am using the below written query to add a foreign key to an Existing Field with data:
ALTER TABLE ServiceDetails
ADD CONSTRAINT fk_ServiceDetails
FOREIGN KEY (OCF_ID)
REFERENCES OCF_Commerce(OCF_Internal_ID);
But I am getting an error after executing the query. What am I missing?
The error message is:
Msg 547, Level 16, State 0, Line 1
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "fk_ServiceDetails". The conflict occurred in database "TrulyDB", table "dbo.OCF_Commerce", column 'OCF_Internal_ID'.
You probably have inconsistent data in your tables
try running
select *
from ServiceDetails
where OCF_ID not in (select OCF_Internal_ID from OCF_Commerce)
This will output all rows with ID absent in master table

SQL Constraint-Insert Fails

I have two table table1 and table2. I have a record in table1. I want to insert record into table2. but it comes up with the following Exception.
Msg 547, Level 16, State 0, Line 2
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Table2_<Column3>". The conflict occurred in database "<databaseName>", table "table1", column 'Id'.
The constraint on the table2 is like this.
ALTER TABLE [dbo].[table2] ADD CONSTRAINT [DF__table2__name__0B91BA14] DEFAULT ((0)) FOR [column4]
The error shows that you also have a foreign key constraint and you are trying to insert a row into a child table that doesn't have corresponding record in master
The exception message is telling you which constraint is causing the issue. It's against Column3 (at least that's what the name suggests) and is a foreign key constraint against table1.
You're not showing any sample SQL but it would appear you're trying to insert data in to table2 where the foreign key value specified for Column3 does not exist in table1.
Your Comment helped me.
I have used this Query to insert data into the new database from the old databse.
INSERT INTO Database.[dbo].[Table2] ([colmn1]
,[colmn2]
,[colmn3]
,[columns4]
)
SELECT [colmn1]
,[colmn2]
,[colmn3]
,[columns4]
FROM [OtherDatabase].[dbo].[Table2]
But there is a constarint on colum3 which is foreign key on Table1.
I have changed the colmn3 of table1 to same Guid as otherDatabase Guid and it works.
Thanks All

Resources