2010-10-01 17 views
5
string sqlInsert = "Insert into account_details(
    account_number, 
    account_type, 
    transfer_access_code, 
    account_balance, 
    customer_id) 
SELECT 
    account_number, 
    account_type, 
    transfer_access_code, 
    account_balance, 
    customer_id 
from customer_details"; 

To zapytanie tylko pobiera dane z danych klienta (Tabela 1) i włożyć to chodzi w drugiej Table2 (account_details)klucz podstawowy naruszenia ograniczenia

gdy ta kwerenda jest zwolniony po raz pierwszy współpracuje

ale po drugim uruchomieniu wyświetla komunikat o błędzie Naruszenie ograniczenia klucza głównego "PK_account_details". Nie można wstawić duplikatu klucza do obiektu "dbo.account_details".

jakiś pomysł, aby pominąć istniejące dane (account_details) tabela1 i wstawienie nowych danych w następnym rzędzie

+1

jaki jest klucz podstawowy? –

+0

customer_id w tabeli customer_details i account_number w tabeli szczegółów konta –

Odpowiedz

5

Używanie LEFT JOIN pozwala wykluczyć wszystkie wiersze, które są już obecne w tabeli account details. Alternatywą dla tego (i prawdopodobnie jeszcze szybszego) jest użycie NOT EXISTS.

użyciu LEFT JOIN

INSERT INTO account_details (
    account_number 
    , account_type 
    , transfer_access_code 
    , account_balance 
    , customer_id) 
SELECT account_number 
     , account_type 
     , transfer_access_code 
     , account_balance 
     , customer_id 
FROM customer_details cd 
     LEFT OUTER JOIN account_details ad ON ad.Account_number = cd.account_number 
WHERE ad.account_number IS NULL   

użyciu NOT EXISTS

INSERT INTO account_details (
    account_number 
    , account_type 
    , transfer_access_code 
    , account_balance 
    , customer_id) 
SELECT account_number 
     , account_type 
     , transfer_access_code 
     , account_balance 
     , customer_id 
FROM customer_details cd 
WHERE NOT EXISTS (
      SELECT * 
      FROM  account_details 
      WHERE account_number = cd.account_number) 
+0

+1 za wzmiankę o NOT EXISTS. Przykład byłby również dobry. –

+0

Dodano NOT EXISTS przykład. –

4

zakładając ACCOUNT_NUMBER jest klucz podstawowy, powinno to działać

string sqlInsert = "Insert into account_details(
    account_number, 
    account_type, 
    transfer_access_code, 
    account_balance, 
    customer_id) 
SELECT 
    cd.account_number, 
    cd.account_type, 
    cd.transfer_access_code, 
    cd.account_balance, 
    cd.customer_id 
from customer_details cd 
left outer join account_details ad 
    on cd.account_number = ad.account_number 
where ad.account_number is NULL"; 
+1

ahh, @Lieven, pokonałeś mnie przez kilka sekund ... – Sage

+0

Już myślałem, * to jest przerażające *;) –

+2

+1 btw (7 ... nie 2 ... nie ma 556 znaków) –

0
INSERT INTO account_details (ad.account_number, ad.account_type, 
    ad.transfer_access_code, ad.account_balance, ad.customer_id) 
SELECT cd.account_number, cd.account_type, 
    cd.transfer_access_code, cd.account_balance, cd.customer_id 
FROM customer_details cd 
LEFT OUTER JOIN account_details ad 
    ON cd.account_number = ad.account_number 
WHERE ad.account_number is NULL 
Powiązane problemy