2009-12-16 5 views
0

J'ai une requête imbriquée que j'essaie de lancer; Cependant, je dois dépister les chiffres avec -1 je donne les résultats suivants:Mise à jour tsql avec sélection imbriquée: moyen plus facile?

update invoices set type = 5 where tranno like dbo._fnStripLeadZeroes(( 
    select invoice_number from [bob.jupiter.com].webap.dbo.billinglog)) + '-1' 

avec INVOICE_NUMBER (varchar15) et tranno (varchar10)

suis-je aborder ce bien?

+0

La sous-requête ne ressemble pas à un scalaire. –

+0

pourriez-vous ajouter des exemples de données? montrer quelques enregistrements qui seraient mis à jour, et un couple qui ne serait pas – Ray

Répondre

1

Il ne doit pas s'agir d'une requête imbriquée. Ce que vous voulez, c'est joindre la table des factures à la table billingLog pour déterminer les lignes à rejoindre. L'utilisation de la syntaxe 'update/set/from/where' vous permet d'utiliser une jointure dans votre mise à jour et elle se lit bien.

J'ai utilisé une expression de table commune [la; avec la facturation sous (..)] pour aider à simplifier votre requête.

Enfin, j'ai changé le LIKE à un '=' parce que vous n'utilisiez pas de caractères génériques, de sorte que l'équivalent fonctionnait comme un égal de toute façon.

;with billing as 
(
    select dbo._fnStripLeadZeros(invoice_number) + '-1' as invoice_number 
    from [bob.jupiter.com].webapp.dbo.billinglog 
) 
update inv 
set inv.type = 5 
from invoices inv 
inner join billing b 
    on (inv.tranno = b.invoice_number ) 
Questions connexes