2010-08-13 5 views
0

Je souhaite faire quelque chose de similaire à ci-dessous. J'ai la pseudo-logique ci-dessous. Il suffit de se demander comment implémenter ceci:T-sql range Requête

delete B 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber <= B.startipnum and A.Endnumber >= B.endipnum 

delete A 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber => B.startipnum and A.Endnumber <= B.endipnum 

update B 
set endipnum = startnumber - 1 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber < B.startipnum and A.Endnumber <= B.endipnum 

update B 
set startipnum = endnumber + 1 
from 
TableA A with (nolock), TableB B with (nolock) 
where A.BeginNumber >= B.startipnum and A.Endnumber > B.endipnum 

données exemples

Tableau A

BeginNumber EndNumber 
----------  --------- 
16843009 16843009 
16843009 16843010 
16843009 16843013 
16843009 16843016 
33686020 33686024 

TableB

startipnum endIPNum 
----------  --------- 
1488047401 1488047401 
1504824617 1873923369 
1890700585 1907477801 
1924255017 2142358825 
2159136041 2276576553 

Il n'y a pas à colonnes j Entre les 2 tables. S'il vous plaît aider.

Merci!

+0

Pouvez-vous fournir quelques lignes de données d'échantillon provenant du tableau A et du tableau B? Je ne comprends pas vraiment ce que vous devez faire. –

+0

Je l'ai ajouté au corps général de la question ci-dessus. La mise en forme est en train de se gâter.Veuillez jeter un coup d'oeil. – sharadov

+0

J'ai corrigé la mise en forme (placez les tables dans des blocs de code pour préserver la mise en page), donc pour les exemples de données que vous avez fournis, quels devraient être les résultats pour les requêtes 1,2,3 et 4? –

Répondre

0

Rien ne vous empêche d'effectuer une jointure avec une clause on de par ex. ON 1=1 - qui se joindra à tous - de même, un CROSS JOIN réalise le même (et est une meilleure façon de le faire TBH).