J'ai une base de données appelée Customer
qui a une table appelée CustDetails
. Les données dans le tableau sont semblables à ci-dessous (j'en ai enlevé une partie pour la brièveté). ID
est le PK.Copier des données de la table SQL Server vers la même table
CustDetails:
ID CustNo Year StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2
J'ai une autre base de données appelée Claim
sur le même serveur, qui a une table appelée ClaimDetails
(ne me demandez pas pourquoi les tableaux ne sont pas dans le même DB, mais la décision de conception a été faite avant de venir à bord et n'est pas quelque chose que je peux changer.)
Les données sont similaires ci-dessous (à nouveau certaines d'entre elles enlevées par souci de concision)
ClaimDetails:
ID ClaimNumber CustNo
----------------------
1 1 1231
2 2 1232
3 3 1236
4 4 1237
J'ai quelques petites choses à accomplir:
- Copiez toutes les lignes de
CustDetails
où l'année est 2015 et changer l'année 2016 - Si l'état du résultat de la partie 1 est 2 la définir sur 1 pour 2016
- Créer une liste négative pour trouver
CustNo
qui se trouvent dans la tableClaimDetails
mais qui ne sont pas dans laCustDetails
tableau - pour ces créer une nouvelle ligne dans le tableauCustDetails
et définir l'état à 3 et l'année 2016.
Donc, pour les données que j'ai énuméré au-dessus du résultat final que je veux atteindre est:
CustDetails:
ID CustNo Year StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2
6 1231 2016 1
7 1232 2016 1
8 1233 2016 1
9 1236 2016 3
10 1237 2016 3
jusqu'à présent, j'ai cette requête:
insert into CustDetails (CustNo, Year, StatusId)
select
CustNo, 2016, StatusId
from
CustDetails
where
Year = 2015
Cela couvre une partie 1. Je n'ai pas la logique en place pour la partie 2 dans la requête ci-dessus et je suppose que je pouvais faire:
UPDATE CustDetails
SET StatusId = 1
WHERE Year = 2016 AND StatusId = 2
Encore une fois, je ne l'ai pas fait la requête pour une partie 3 mais je pense que je pourrais obtenir les CustNo
« s qui sont ClaimDetails
mais pas dans CustDetails
en faisant quelque chose comme:
SELECT CustNo
FROM ClaimDetails
WHERE CustNo NOT IN (SELECT CustNo FROM CustDetails)
Et puis fais créer des ID pour chaque CustNo individuellement.
Question est-ce la meilleure façon de le faire ou devrais-je faire quelque chose comme copie à une table temporaire d'abord. Et la requête pour la 3ème partie fonctionnera bien même si ce sont deux DB séparés - je suppose que s'ils sont sur le même serveur tant que je qualifie complètement la DB cela devrait fonctionner correctement.
@parfait - note J'ai dit cela dans ma question et j'ai aussi mentionné que c'est quelque chose que je n'ai pas le contrôle sur le changement –