Alter primary key constraint - efficient way

Please let me know the efficient way to alter the primary key constraint in a table(it has millions of records).
Thanks.

Do you want to have a NCI on PK instead of CI? You have to drop a constraint.. You know , a  constraint is a logical component  but the index (unique) that SQL Server creates behind the scene is a physical implementation...
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence

Similar Messages

  • Altering Primary Key constraint on a table i Oracle 10G

    Hi All,
    Can anyone tell me how to alter a primary key constraint on any table. My concern is that, suppose i have a table called 'Employee' where only 'EmployeeName' is added as a primary ket constaint. Now i want to alter this P.K. constarint to add 'EmployeeName' and 'DateOfBirth' as a primary key. Can anyone suggest me how can i achieve that? Any help will be highly appreciated.

    hi,
    you need to drop the constraint and recreate it.
    SQL> conn scott/tiger@alpspso
    Connected.
    SQL> create table test (id number constraint id_pk primary key,name varchar(30));
    create table test (id number constraint id_pk primary key,name varchar(30))
    ERROR at line 1:
    ORA-00955: name is already used by an existing object
    SQL> create table test_table (id number constraint id_pk primary key,name varchar(30))
    Table created.
    SQL> alter table test_table modify constraint id_pk primary key(id,name);
    alter table test_table modify constraint id_pk primary key(id,name)
    ERROR at line 1:
    ORA-00933: SQL command not properly ended
    SQL> alter table test_table modify constraint id_pk(id,name);
    alter table test_table modify constraint id_pk(id,name)
    ERROR at line 1:
    ORA-00933: SQL command not properly ended
    SQL> alter table test_table modify primary key(id,name);
    alter table test_table modify primary key(id,name)
    ERROR at line 1:
    ORA-00933: SQL command not properly ended
    SQL> alter table drop constraint id_pk;
    alter table drop constraint id_pk
    ERROR at line 1:
    ORA-00903: invalid table name
    SQL> alter table test_table drop constraint id_pk;
    Table altered.
    SQL> alter table test_table add constraint id_pk primary_key(id,name);
    alter table test_table add constraint id_pk primary_key(id,name)
    ERROR at line 1:
    ORA-00902: invalid datatype
    SQL> alter table test_table add constraint id_pk primary key(id,name);
    Table altered.
    Regards.
    Navneet

  • Altering Primary Key Constraint

    hi this may sound silly .
    but is it possible to alter a primary key constraint and add another column to it ?
    eg. >desc t1
    c1 number(3) not null
    c2 number(3)
    here I have created primary key on column c1.
    Now I want to alter this constraint and add second column also as part of primary key constraint (so that it will be composite primary key )
    How do i do that ? Do the column needs to be empty ?
    Thanks

    You should use ALTER TABLE DROP CONSTRAINT / ADD CONSTRAINT option.
    Do the column needs to be empty ?Because primary key constraint supposes NOT NULL constraints for columns
    included into primary key, all columns havn't to have nulls values (NOT NULL constraint will be added to c2 column):
    SQL> create table t1 (c1 number(3) not null, c2 number(3));
    Table created.
    SQL> alter table t1 add constraint t1_pk primary key(c1);
    Table altered.
    SQL> insert into t1 values(1,1);
    1 row created.
    SQL> insert into t1 values(2,null);
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> alter table t1 drop constraint t1_pk;
    Table altered.
    SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
    alter table t1 add constraint t1_pk primary key (c1,c2)
    ERROR at line 1:
    ORA-01449: column contains NULL values; cannot alter to NOT NULL
    SQL> update t1 set c2 = 3;
    2 rows updated.
    SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
    Table altered.
    SQL> desc t1
    Name                                      Null?    Type
    C1                                        NOT NULL NUMBER(3)
    C2                                        NOT NULL NUMBER(3)Rgds.

  • Large table, primary key constraint

    I have migrated a table from 8i to 9i that is over 300 million rows. I migrated the the table to a 9i database without constraints or indexes.
    I have successfully created a composite index of two columns, t1 varchar2(512), t2 varchar2(32). This index took nearly 16 hours to create.
    I am now trying to create a primary key based on that index with the following sql:
    alter table table1
    add constraint table1_t1_t2_pk primary key(t1,t2)
    using index table1_t1_t2_idx
    nologging
    This process has taken over 24 hours and is well into the second day. Studio reports it will take an additional 15 hours to create.
    My questions are these?
    1. Is my syntax okay?
    2. I thought that by creating a primary key on an existing index, that another index is not being created. I thought it would be faster this way. Why is it taking a lot longer to create then the index it is based upon?
    3. Is there a more efficient method (other than parallel query) to create this index/constraint on such a large table? What happens when I go production and need to recreate this index if I have a failure. I have never had to do this before. I can't be down for 48 hours to create an index. What other alternatives do I have?
    The table is partit[i]Long postings are being truncated to ~1 kB at this time.

    Is INDEX table1_t1_t2_idx UNIQUE? If it's not that might explain why building the primary key constraint takes longer.
    I think the USING INDEX clause with an existing index is intended mainly for different UNIQUE constraints to share the same index. In your situation I think you would be better off just building the primary key constraint.
    Cheers, APC

  • Primary Key Constraint

    dear members,
    I have a tables named orders and part. Both of them contain common column named partnum. The column partnum in the table orders contains duplicates. I tried to add a primary key constraint to that column partnum but sql*plus gave me an error unique constraint voilation.
    The reason for the error was because of duplicates in the column partnum but if i want to assign a column as a primary key and suppose it contains duplicates then how can i do that ? I cannot alter my table orders data, in this case how should i proceed further!!!

    You cannot use a single column with duplicates or null values as a primary key. It's that simple.
    If a given single column has duplicates values its not a possible candidate for a primary key. It has to be an unique value.
    I'm not fully sure here but kinda feels like your table "orders" has information about all orders (purchase, sell, whatever) related with "parts". So, this way if its possible that orders has duplicates because you have several orders on the same "part". I think "part" has a primary key on "partnum". If there's a need for a pk in "orders" maybe you have an additional column, let's call it "ordernum".

  • Modify a primary key constraint

    Hi,
    I'm starting with oracle, and I have two doubts that can't handle after searching on the internet.
    1º It's possible to make an ALTER TABLE of a CONSTRAINT DEFAULT?. Maybe you think that the question should be in another way like this: Does oracle database take the default condition as a constraint?. As long as I know, doesn't do that.
    2º It's possible, with an ALTER TABLE, to MODIFY a CONSTRAINT of a PRIMARY KEY, to add another more field?
    I've been searching on the internet, but I didn't find a clear answer. I'm using oracle 10g express edition.
    Thank you very much.
    P.D.:Sorry for my english it's not very good.

    #2 - You can not 'add a column to the primary-key constraint of a table' with a single ALTER, but you can drop and re-create the primary key constraint (including the additional column).
    13:25:26> create table t1 (a number primary key, b number, c number );
    Table created.
    Elapsed: 00:00:00.09
    13:25:46> alter table t1 drop primary key;
    Table altered.
    Elapsed: 00:00:00.06
    13:25:47> alter table t1 add primary key (a,b);
    Table altered.
    Elapsed: 00:00:00.09But you will not be able to drop the primary key of an index-organized table.
    13:25:47> create table t2 (a number primary key, b number, c number ) organization index;
    Table created.
    Elapsed: 00:00:00.03
    13:25:59> alter table t2 drop primary key;
    alter table t2 drop primary key
    ERROR at line 1:
    ORA-25188: cannot drop/disable/defer the primary key constraint for
    index-organized tables or sorted hash cluster
    Elapsed: 00:00:00.00
    13:25:59> #1 - I'm not sure I understand your question , but you can alter a table's column to have a default. This is not a 'constraint', but a default. It only has effect when you perform an insert which does not include that column.
    13:31:23> alter table t1 modify (c default 3.14);
    Table altered.
    Elapsed: 00:00:00.04
    13:31:24> insert into t1 (a,b,c) values (1,2,3);
    1 row created.
    Elapsed: 00:00:00.01
    13:31:24> insert into t1 (a,b,c) values (4,5,NULL);
    1 row created.
    Elapsed: 00:00:00.00
    13:31:24> insert into t1 (a,b) values(6,7);
    1 row created.
    Elapsed: 00:00:00.01
    13:31:24> select * from t1;
             A          B          C
             1          2          3
             4          5
             6          7       3.14
    3 rows selected.
    Elapsed: 00:00:00.18

  • How add primary key constraint to already existing table with data

    I want apply primary key constraint to already existing table with data
    is there any command or way to do

    Alternatively, assuming you want to ensure uniqueness in your primary key column you can do this:
    alter table <table name> add constraint <cons name> primary key (col1,col2) exceptions into <exception_table>
    If the altter table statement fails this will populate the EXCEPTIONS table with the rows that contain duplicate values for (col1,col2).
    You will need to run (or get a DBA to run) a script called UTLEXCPT.SQL (which will be in the $ORACLE_HOME/rdbms/admin directory) if you don't already have an EXCEPTIONS table.
    Cheers, APC

  • SQL Server - primary key constraint modify

    Hi,
    I have a table with many records. I wanted to modify the primary key constraint. The only way to alter the primary key constraint is to drop and create again. Please let me if it is right.
    Can we create primary key constraint with NoCheck. Since we have lots of records in our table, creating primary key constraint takes more time because it is checking the existing data. Please provide your comments.
    Thanks.

    >>I have a table with many records. I wanted to modify the primary key constraint. The only way to alter the primary key constraint is to drop and create again. Please let me if it is right.
    http://technet.microsoft.com/en-us/library/ms181043(v=sql.105).aspx
    Note
    To modify a PRIMARY KEY constraint, you must first delete the existing PRIMARY KEY constraint and then re-create it with the new definition.
    >>Can we create primary key constraint with NoCheck. Since we have lots of records in our table, creating primary key constraint takes more time because it is checking the existing data. Please provide your comments.
    http://msdn.microsoft.com/en-IN/library/ms188066.aspx
    When FOREIGN KEY or CHECK constraints are added, all existing data is verified for constraint violations unless the WITH
    NOCHECK option is specified. If any violations occur, ALTER TABLE fails and an error is returned. When a new PRIMARY KEY or UNIQUE constraint is added to an existing column, the data in the column or columns must be unique. If duplicate values are found, ALTER
    TABLE fails. The WITH NOCHECK option has no effect when PRIMARY KEY or UNIQUE constraints are added.
    Satheesh
    My Blog |
    How to ask questions in technical forum

  • DISABLE primary key constraint

    Hello,
    let me know whats meaning by this....
    Here, it creates a primary key and disable it... So whats the purpose of doing this...
    (defines and disables an integrity constraint)
    Constraint is DISABLED. is it in VALIDATE state / NO-VALIDATE state)
    CREATE TABLE emp (
    empno NUMBER(5) PRIMARY KEY DISABLE, . . . ;
    ALTER TABLE emp
    ADD PRIMARY KEY (empno) DISABLE;
    Thanks
    Edited by: Zerandib on Nov 12, 2008 6:47 AM

    Having just done this this morning, let me have a go at explaining one possible use for this feature:
    I am bulk-loading some data into a table. I know that some of the rows in that data duplicates other rows, and that I need to clean out those duplicates.
    The quickest way of detecting duplicates I know of is to attempt to switch on a primary or unique key constraint and have the duplicate records written out to an EXCEPTIONS table. Therefore, I create my loading table with a primary key constraint DISABLED, so that I can actually perform the data load which I know will violate the constraint. If I'd created it enabled, which is the default, the bulk load would never be able to insert anything into the table, after all. When the load is finished, I do this:
    alter table bulk_load enable constraint bulk_load_pk exceptions into exceptions;...and then I can use other techniques to use the new contents of the EXCEPTIONS table to work out which rows from the BULK_LOAD table to delete to clear out the duplicates.
    All constraints when first created are in the enabled validate state, unless you specify otherwise. If you miss out the validate/novalidate keyword, in other words, your constraint will be created as VALIDATE.
    Hope that helps a little.

  • Unable to enforce Primary Key constraint with my code

    Hi Guys
    I have a table that contains 2 columns: code and description (defined as not null). I am using oracle forms 10g, if I inset a new row both the columns: code and description should have data e.g. code: 001 and description: Main Store...
    So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the database but if I remove the piece of code (the first IF block on my code together with a cursor and the entire declaration section)then the primary key constraint is violated: the code is as follows:
    declare
    v_store_code store_types.code%type;
    cursor store_codes is
    select a.code
    from store_types a
    where a.code = :b1.code;
    begin
    open store_codes;
    fetch store_codes into v_store_code;
    if ( store_codes%found ) then
    Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
    Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
    close store_codes;
    raise form_trigger_failure;
    end if;
    close store_codes;
    if :b1.code is not null and :b1.description is null then
         message('If the Store Code has been captured, then the Store Description must be captured!');
         message('If the Store Code has been captured, then the Store Description must be captured!');
    raise form_trigger_failure;
    end if;
    if :b1.description is not null and :b1.code is null then
         message('If the Store Description has been captured, then the Store code must be captured!');
         message('If the Store Description has been captured, then the Store code must be captured!');
         raise form_trigger_failure;
    end if;
    exception
              when others then
                   message(sqlerrm);
                   raise form_trigger_failure;
    end;
    My main intention here is: the user should be able to update the description field and save the changes without violating primary key on the column: code ...... please help me guys...

    ICM
    Sir as far I could understand , your problem is that your wanna allow the end users to update the Store_description , and Store_code..
    So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the databaseif it's right then why don't you have unique key constraints Store_description?
    alter the tables and apply unique key constraint...
    and no need to write this code
    f :b1.code is not null and :b1.description is null then
    message('If the Store Code has been captured, then the Store Description must be captured!');
    message('If the Store Code has been captured, then the Store Description must be captured!');
    raise form_trigger_failure;
    end if;because as you mentioned
    code and description (defined as not null)if they are already under not null constraints then no need to handle this in coding..
    he/she must be able to change the description and save the changes without affecting the code i.e.:Sir I think updation in records can only be performed when the forms is in query mode e.g execute query, have all/desired records and then make changes
    (1)description is in unique key constraint it can't be duplicated ..
    (2)code is PK it can never be duplicated...
    for this I would suggest you to have a update button on forms , when-button-pressed trigger sets property of block (update_allowed, property_true);
    and check the code of unique key violation code from oracle form's help , when that error code raise up you can show those message
    Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
    Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');I hope it could do something for you
    thanks
    regards:
    usman noshahi

  • [SQL Server]Violation of PRIMARY KEY constraint 'DeploymentSummary_PK'. Cannot insert duplicate key in object 'dbo.DeploymentSummary'. The duplicate key value is

    I have migrated my SCCm 2007 environment to SCCM 2012 SP1 CU4.
    I noticed in the System Status\Component Status\SMS_STATE_SYSTEM a lot of errors like the one below:
    Microsoft SQL Server reported SQL message 2627, severity 14: [23000][2627][Microsoft][SQL Server Native Client 11.0][SQL Server]Violation of PRIMARY KEY constraint 'DeploymentSummary_PK'. Cannot insert duplicate key in object 'dbo.DeploymentSummary'. The duplicate key value is (1, 0, S0220438, 0). : spUpdateClassi
    Please refer to your Configuration Manager documentation, SQL Server documentation, or the Microsoft Knowledge Base for further troubleshooting information.
    When looking up the deployment ID and recreate the Deployment the problem is solved. But I have 700 packages and don't want to manually do this action on all packages. I think it is related to the migration i did and something went wrong there :-(
    Besides it will retriggers the deployment to the clients which is also not preferred.
    Is there another way to solve this by e.e.g do something directly in the SQL database tables ?

    Hi,
    It is not supported by Microsoft that do something directly in SQL database.
    If you want to do that, you could make a call to CSS.
    Best Regards,
    Joyce
    We
    are trying to better understand customer views on social support experience, so your participation in this
    interview project would be greatly appreciated if you have time.
    Thanks for helping make community forums a great place.

  • Violation of PRIMARY KEY constraint in JDBC receiver

    Hi Experts !
    I am configuring a JDBC Receiver. I need to insert the records and if the same record is coming again i need to update the records in my database.So I have used action "UPDATE_INSERT". But now I am getting the error,
    "Violation of PRIMARY KEY constraint-Cannot insert duplicate key in object " .. Pls help me out !!!  It is very urgent!!
    Thanks,
    Laawanya

    Lawanya,
    It seems that you are trying to update the primary key itself..
    One thing is sure The error is related to data....
    Do this at JDBC receiver Communication channel :
    Under advanced option : use parameter "logSQLParameter" and use value "TRUE"...by this way you will be able to see the values passing through JDBC receiver .
    And then check whether the same value exist in Table or not...
    Feel free to ping for further clarification..
    Regards,

  • Violation of PRIMARY KEY constraint

    Hello,
    I have the following table in my oracle database :
    create table FLTRPTDATA
    esn VARCHAR2(10) default 'ALL' not null,
    periodid NUMBER not null,
    yearid NUMBER default 2007 not null,
    reportid NUMBER not null,
    entryid NUMBER not null,
    operatorid VARCHAR2(30) default 'XXX' not null,
    param1 VARCHAR2(200),
    param2 VARCHAR2(200),
    param3 VARCHAR2(200),
    param4 VARCHAR2(200),
    param5 VARCHAR2(200),
    param6 VARCHAR2(200),
    param7 VARCHAR2(200),
    param8 VARCHAR2(200),
    param9 VARCHAR2(200),
    param10 VARCHAR2(200),
    acid VARCHAR2(8) default 'ALL' not null
    and also have a composite primary key for the table as follows :
    add constraint PK_FLTRPTDATA primary key (ESN, PERIODID, YEARID, REPORTID, ENTRYID, OPERATORID, ACID)
    using index
    So I expect that I can only insert a new row into the table if the combination of values for ESN,PERIODID,YEARID,REPORTID,ENTRYID,OPERATORID and ACID are unique.
    I am running some software that inserts new rows into the table (via an INSERT SQL statement).
    When the software runs, it inserts a certain number of rows, but then stops when inserting one of the rows with a Violation of PRIMARY KEY constraint 'PK_FLTRPTDATA'. Cannot insert duplicate key in object 'fltRPTDATA' error.
    This implies that the row being inserted contains values for the composite key columns that are NOT unique. However, when I look at the data it fails to insert, I can see that there are NO rows in the table for this combination of column values.
    If I then try to MANUALLY insert the same row myself (via my own SQL statement in SQL Developer), the row is inserted with no error.
    When I run the software, the first thing it does is delete any rows in the table that it will subsequently insert, so there cannot be any duplicate entries in the table before the inserts take place. I have run the SQL statement that does the deletion myself manually, and it does delete all of the relevant rows.
    I have checked the code (I am not the author), and I cannot see anything that would cause the same INSERT to be executed twice.
    I have checked the log file generated by the software, and the INSERT is only attempted once (according to the log).
    I don't understand why the insert fails when I run the software, and I am wondering if anyone can shed any light on the issue? Has anyone seen this scenario before where you get a PRIMARY KEY constraint violation on a composite key, where the data being inserted IS unique?
    Thanks for any help and apologies if this is in the wrong forum,
    Jason.

    >
    I don't understand why the insert fails when I run the software, and I am wondering if anyone can shed any light on the issue? Has anyone seen this scenario before where you get a PRIMARY KEY constraint violation on a composite key, where the data being inserted IS unique?
    >
    One way to find those records would be to create and use a dml error log table. Then those records would get logged to the log table and would not prevent the insert of the valid records.
    See Loading Tables in the DBA Guide
    http://docs.oracle.com/cd/E11882_01/server.112/e17120/tables004.htm#InsertDMLErrorLogging
    Then you can examine the records in the log table and see why they were rejected.

  • Primary key constraint for index-organized tables or sorted hash cluster

    We had a few tables dropped without using cascade constraints. Now when we try to recreate the table we get an error message stating that "name already used by an existing constraint". We cannot delete the constraint because it gives us an error "ORA-25188: cannot drop/disable/defer the primary key constraint for index-organized tables or sorted hash cluster" Is there some sort of way around this? What can be done to correct this problem?

    What version of Oracle are you on?
    And have you searched for the constraint to see what it's currently attached to?
    select * from all_constraints where constraint_name = :NAME;

  • Modifying column adding primary key constraint

    how can we alter a table and modify a column and add a primary key constraint to it??

    987018 wrote:
    can't we add a primary key constraint using the modify command?If the column already exists, and ther is no existing primary key, then
    SQL> create table t (id number, descr varchar2(10));
    Table created.
    SQL> alter table t modify (id not null primary key);
    Table altered.If the column does not yet exist and ther is no primary key then:
    SQL> create table t1 (descr varchar2(10));
    Table created.
    SQL> alter table t1 add (id number not null primary key);
    Table altered.John

Maybe you are looking for

  • How to make plant mandatory field in Sales order thru standard SAP process

    Hello, There is requirement in business that User wants to make plant field Mandatory in Sales order line item once material number is entered. Can you please guide me how I can make Plant field mandatory thru Standard SAP process. I had checked it t

  • CSV Output Format.

    Hi all, I have a requirement to provide CSV output with RTF template. When i export, its save in txt format in default. Is ther any other way to save the file directly in CSV format. I have used some codes in rtf to bring dynamic concept. I am using

  • Connect g5 to tv

    how can i connect my g5 dp 1.8 to a composite rca tv connector is there a dvi converter or is there a card i can add

  • Can't locate originals; but have aliases for album

    I can access aliases in Finder for photos from an album, but I cannot open them because I get the diaglog box saying "can't open because originals are missing" (that's paraphrasing, obviously). Are the aliases any good for recovering the originals? O

  • Not executing the job automatically scheduled in dba_scheduler_jobs

    Hi Friends, I have scheduled a job in dba_scheduler_jobs ,it should run on every 15 mins intervel , But it is not happening.If I trigger the job by manually .. like exec dbms_scheduler.run_job('SNAP15MIN_JOB') , executing successfully. please fiind t