Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 11:59:03
|
Hi,I have the below query written so that i do not insert entries that is already existing in the table. I am trying to put in 70000 entries at a single shot and it breaks down. Can anybody help me optimize the below query so that it doesnt break? Is there any other way I can write this query?Please do help me with this. Thanks in advance. The table in which i am inserting the entries has a composite key composed of ACCT_NUM_MIN and ACCT_NUM_MAX. I am getting this from a table which doesnt have a primary key(CORE)INSERT INTO CRF (CORE_UID,ACCT_NUM_MIN, ACCT_NUM_MAX,BIN, BUS_ID,BUS_NM,ISO_CTRY_CD, REGN_CD, PROD_TYPE_CD, CARD_TYPE) SELECT UID , LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16), BIN, BUS_ID, BUS_NM, ISO_CTRY_CD, REGN_CD, PROD_TYPE_CD, CARD_TYPE FROM CORE o WHERE NOT EXISTS (SELECT * FROM CRF i WHERE o.ACCT_NUM_MIN = i.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i.ACCT_NUM_MAX) |
|
X002548
Not Just a Number
15586 Posts |
|
harsh_athalye
Master Smack Fu Yak Hacker
5581 Posts |
Posted - 2007-09-18 : 12:05:34
|
Try to rewrite query using LEFT JOIN instead of NOT EXISTS.Harsh AthalyeIndia."The IMPOSSIBLE is often UNTRIED" |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-09-18 : 12:07:15
|
quote: Originally posted by harsh_athalye Try to rewrite query using LEFT JOIN instead of NOT EXISTS.Harsh AthalyeIndia."The IMPOSSIBLE is often UNTRIED"
Why?Do you think it would make a differece to the Optimizer?Besides, you left off the null checkBrett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
|
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:10:02
|
This is for the CRF table CREATE TABLE [CRF] ( [UID] [int] IDENTITY (1, 1) NOT NULL , [CORE_UID] [int] NULL , [BUS_ID] [int] NULL , [BIN] [float] NULL , [ISO_CTRY_CD] [smallint] NULL , [ACCT_NUM_MIN] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [ACCT_NUM_MAX] [varchar] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [BUS_NM] [varchar] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [LAST_NM] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [REST_OF_NM] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [EMAIL_ADDR] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ACS30_URL1_UID] [int] NULL , [ACS30_URL2_UID] [int] NULL , [AACS30_URL1_UID] [int] NULL , [AACS30_URL2_UID] [int] NULL , [PROCESSOR_ID] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [PROCESSOR_RULE_ID] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ACS_TIMEOUT] [int] NULL , [FLG_CHLD_EXIST] [bit] NULL CONSTRAINT [DF_DPT_CRF_FLG_CHLD_EXIST] DEFAULT (0), [FLG_APPROVAL_PENDING] [bit] NULL CONSTRAINT [DF_DPT_CRF_FLG_APPROVAL_PENDING] DEFAULT (0), [PARENT_UID] [int] NULL , [REGN_CD] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [FRM_CORE] [bit] NULL , [FLG_DELETED] [bit] NULL CONSTRAINT [DF_DPT_CRF_FLG_DELETED] DEFAULT (0), [DELETED_BY] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [PROD_TYPE_CD] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [HLDNG_CMPNY_ID] [varchar] (256) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [ENROLL_URL] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [CARD_TYPE] [char] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [INCLUSIVE_DEVICES] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , CONSTRAINT [UNIQUE_CARDRANGE_DPT] PRIMARY KEY CLUSTERED ( [ACCT_NUM_MIN], [ACCT_NUM_MAX] ) ON [PRIMARY] ) ON [PRIMARY]GOThis is for the CORE tableCREATE TABLE [CORE] ( [UID] [int] IDENTITY (1, 1) NOT NULL , [BIN] [numeric](7, 0) NOT NULL , [BUS_ID] [int] NOT NULL , [BUS_NM] [varchar] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [ISO_CTRY_CD] [numeric](3, 0) NOT NULL , [ACCT_NUM_MIN] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [ACCT_NUM_MAX] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [PROD_TYPE_CD] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [PROD_LONG_NM] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [B1_PROC_RULE_ID] [char] (11) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [B2_PROC_RULE_ID] [numeric](10, 0) NULL , [DB_PROC_RULE_ID] [char] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [B1_PCR] [char] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [B2_CIB] [numeric](7, 0) NULL , [DB_PCR] [char] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [REGN_CD] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [ACCT_RNG_LEN_GRP] [smallint] NOT NULL , [CARD_TYPE] [char] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY]GOAn additional information is that another table has already inserted some entries in CRf which the CORE is trying to insert. So it is giving me an error saying"Violation of PRIMARY KEY constraint 'UNIQUE_CARDRANGE_DPT'. Cannot insert duplicate key in object 'CRF'"Please help me out Brett |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-09-18 : 12:16:09
|
UID is an IDENTITY Column. Have you SET IDENTITY_INSERT ON????Also are there are no Unique indexes or PK's on Core?What is the error you are getting. We can only guess unless you tell us what is "breaking down"If it is the UID, either remove it, or if you need to retain the IDENTITY you need to do SET IDENTITY_INSERT CORE ON Problem is, what if the UID Exists alreadyBrett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
|
|
X002548
Not Just a Number
15586 Posts |
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:22:32
|
Hi Brett,I have changed my profile so you can mail me and the error I have already posted in the same post where I posted the DDL.The CORE table doesnt have a PK.CORE table has a UID of its ownCRF table has a UID of its own. Addition to that CRF has the CORE_UID too. Do let me know in the email if you need anything else. |
|
|
X002548
Not Just a Number
15586 Posts |
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:29:15
|
quote: Originally posted by X002548 UID is an IDENTITY Column. Have you SET IDENTITY_INSERT ON????Also are there are no Unique indexes or PK's on Core?NO THERE ARE NO PKsWhat is the error you are getting. We can only guess unless you tell us what is "breaking down"Violation of PRIMARY KEY constraint 'UNIQUE_CARDRANGE'. Cannot insert duplicate key in object 'CRF'If it is the UID, either remove it, or if you need to retain the IDENTITY you need to do SET IDENTITY_INSERT CORE ON I AM ABLE TO ADD ENTRIES IN IT BUT WHEN IT IS TRYING TO INSERT DUPLICATE ONES IT GIVES ME AN ERROR...THERE IS NOTHING WRONG WITH THE TABLE STRUCTUREProblem is, what if the UID Exists alreadyI DO NOT WANT TO INSERT IF THE UID ALREADY EXISTS.....Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
|
|
|
X002548
Not Just a Number
15586 Posts |
|
rockingdesi
Starting Member
31 Posts |
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:32:25
|
quote: Originally posted by X002548 OH, OK, you eliminate where the PK's exists, but what if they don't exits and Core has dup's like your other postWhat if there are dups in Core. What do you want to do about thatI DONT CARE ABOUT DUPLICATES IN THE CORE TABLE. Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
|
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-09-18 : 12:33:03
|
Try thisSET IDENTITY_INSERT CRF ONINSERT INTO CRF (CORE_UID,ACCT_NUM_MIN, ACCT_NUM_MAX,BIN, BUS_ID,BUS_NM,ISO_CTRY_CD, REGN_CD, PROD_TYPE_CD, CARD_TYPE) SELECT UID , LEFT(ACCT_NUM_MIN,16) , LEFT(ACCT_NUM_MAX,16) , BIN , BUS_ID , BUS_NM , ISO_CTRY_CD , REGN_CD , PROD_TYPE_CD , CARD_TYPE FROM CORE o WHERE NOT EXISTS (SELECT * FROM CRF i1 WHERE o.ACCT_NUM_MIN = i1.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i1.ACCT_NUM_MAX) AND EXISTS (SELECT LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) FROM CRF i2 WHERE o.ACCT_NUM_MIN = i2.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i2.ACCT_NUM_MAX GROUP BY LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) HAVING COUNT(*) = 1) WHERE NOT EXISTS (SELECT * FROM CRF i3 WHERE o.UID = i3.UID)SET IDENTITY_INSERT CRF OFF Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-09-18 : 12:37:38
|
quote: Originally posted by rockingdesi
quote: Originally posted by X002548 OH, OK, you eliminate where the PK's exists, but what if they don't exits and Core has dup's like your other postWhat if there are dups in Core. What do you want to do about thatI DONT CARE ABOUT DUPLICATES IN THE CORE TABLE. Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
You have to care about dupsWhat does this produce SELECT LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) FROM CRF i2 WHERE o.ACCT_NUM_MIN = i2.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i2.ACCT_NUM_MAX GROUP BY LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) HAVING COUNT(*) > 1 Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
|
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:37:52
|
Hi Brett,It is giving me an error Explicit value must be specified for identity column in table 'CRF' when IDENTITY_INSERT is set to ON.quote: Originally posted by X002548 Try thisSET IDENTITY_INSERT CRF ONINSERT INTO CRF (CORE_UID,ACCT_NUM_MIN, ACCT_NUM_MAX,BIN, BUS_ID,BUS_NM,ISO_CTRY_CD, REGN_CD, PROD_TYPE_CD, CARD_TYPE) SELECT UID , LEFT(ACCT_NUM_MIN,16) , LEFT(ACCT_NUM_MAX,16) , BIN , BUS_ID , BUS_NM , ISO_CTRY_CD , REGN_CD , PROD_TYPE_CD , CARD_TYPE FROM CORE o WHERE NOT EXISTS (SELECT * FROM CRF i1 WHERE o.ACCT_NUM_MIN = i1.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i1.ACCT_NUM_MAX) AND EXISTS (SELECT LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) FROM CRF i2 WHERE o.ACCT_NUM_MIN = i2.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i2.ACCT_NUM_MAX GROUP BY LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) HAVING COUNT(*) = 1) WHERE NOT EXISTS (SELECT * FROM CRF i3 WHERE o.UID = i3.UID)SET IDENTITY_INSERT CRF OFF Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
|
|
|
X002548
Not Just a Number
15586 Posts |
|
rockingdesi
Starting Member
31 Posts |
Posted - 2007-09-18 : 12:40:33
|
Hi Brett, What is o here?quote: Originally posted by X002548
quote: Originally posted by rockingdesi
quote: Originally posted by X002548 OH, OK, you eliminate where the PK's exists, but what if they don't exits and Core has dup's like your other postWhat if there are dups in Core. What do you want to do about thatI DONT CARE ABOUT DUPLICATES IN THE CORE TABLE. Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
You have to care about dupsWhat does this produce SELECT LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) FROM CRF i2 WHERE o.ACCT_NUM_MIN = i2.ACCT_NUM_MIN AND o.ACCT_NUM_MAX = i2.ACCT_NUM_MAX GROUP BY LEFT(ACCT_NUM_MIN,16), LEFT(ACCT_NUM_MAX,16) HAVING COUNT(*) > 1 Brett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam
|
|
|
rockingdesi
Starting Member
31 Posts |
|
X002548
Not Just a Number
15586 Posts |
|
X002548
Not Just a Number
15586 Posts |
Posted - 2007-09-18 : 12:52:51
|
quote: Originally posted by rockingdesi DPT_CRF is same as the table CRF....i was referring it as CRF instead of DPT_CRF....DPT_CRF = CRF...both are same....just the names are different
Confusing things doesn't help us muchAre you changing the codeBrett8-)Hint: Want your questions answered fast? Follow the direction in this linkhttp://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspxAdd yourself!http://www.frappr.com/sqlteam |
|
|
Previous Page&nsp;
Next Page
|
|
|
|
|