Hej, jag har problem med en insert-fråga. Jag skall plocka in allt (med vissa kriterier) från en tabell till en annan likadan. Men trots att jag i frågan kollar att det inte finns en likadan post så får jag felmeddelandet att jag försker sätta in ett likadant värde i ett unikt fält. Så här ser frågan ut : Du kan ju optimera frågan genom att slå ihop underfrågerna. Vad får du av frågan då? Alltså, om du inte kör inserten, vad blir resultatet av selectfrågan då? funkar verkligen den här delen ännu mer info: Kom på det... Okej dubletter i källtabellen. Inget jag tänkte på. Men tycker två underfråger och en gruppering är lite för mycket. destinct fungerar inte eftersom posterna ändå är unika... men nu är det klart, så skit samma:)insert med underfråga
begin transaction
insert into Caesar408.dbo.relcontactcode
select rcc.*
from c2.dbo.relcontactcode rcc
where rcc.contactcodeid = 843
and
rcc.relContactCodeID not in (select skarp.relContactCodeID
from Caesar408.dbo.relContactCode skarp)
and
rcc.ContactID not in (select skarp.ContactID
from Caesar408.dbo.relContactCode skarp)
commit transaction
Till saken hör kanske att det är binärfält som jämförs.
Tacksam för hjälp!
/PeterSv: insert med underfråga
Testa:
begin transaction
INSERT INTO Caesar408.dbo.relcontactcode
SELECT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))
commit transactionSv: insert med underfråga
Sv: insert med underfråga
> rcc.relContactCodeID = skarp.relContactCodeID
om fälten är av typen binary?
Andreas version av frågan fungerade tyvär inte bättre...Sv: insert med underfråga
tabellen heter relContactCode och har följande fält:
relContactCodeID (binary 16)
ContactCode (int)
ContactID (binary 16)
det finns ett index som består av en kombination av ContactCode och ContactID. Detta måste vara unikt och det är också där skon klämmer. Jag får följande felmeddelande:
Cannot insert duplicate key row in object 'relContactCode' with unique index 'UniqueCode'.
The statement has been terminated.
Hur löser jag detta?Sv: insert med underfråga
Det fanns en dubletter i c2 plus liet andra fel... så här blev den fungerande frågan. får dock köra en fråga till för att stoppa in den ena raden i dubletten
begin transaction
INSERT INTO Caesar408.dbo.relcontactcode
(relContactCodeID, ContactCodeID, ContactID)
SELECT relContactCodeID, ContactCodeID, ContactID
FROM c2.dbo.relContactCode
WHERE ContactCodeID = 843
AND ContactID IN (SELECT q2.ContactID
FROM c2.dbo.relContactCode q2
WHERE q2.ContactCodeID = 843
GROUP BY q2.ContactID
HAVING COUNT(q2.ContactID)<2)
AND ContactID NOT IN (SELECT q3.ContactID
FROM Caesar408.dbo.relContactCode q3
WHERE q3.ContactCodeID = 843
)
AND ContactID IN (SELECT q4.ContactID
FROM Caesar408.dbo.Contact q4
)
commit transaction
select * from relcontactcode where contactcodeid = 843
'''''''''''''''''''''''''''''''''''''''''''
Tack för era tips!
/PeterSv: insert med underfråga
Borde inte denna fråga fungera?
begin transaction
INSERT INTO Caesar408.dbo.relcontactcode
SELECT DISTINCT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))
commit transaction
Ytterligare ett alternativ. Men är tveksam till om denna fråga fungerar efter som alla fäl i resultatet inte ingår i aggregat funktioner eller vad det nu heter:
begin transaction
INSERT INTO Caesar408.dbo.relcontactcode
SELECT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))
GROUP BY rcc.ContactID, rcc.relContactCodeID,
commit transaction
Beror ju på om fälten för dubletterna i källan är unika eller ej. Annars kommer ju inte DISTINCT begränsa urvalet.Sv: insert med underfråga