Come faccio a memorizzare un valore di campo selezionato in una variabile da una query e utilizzarlo in un'istruzione di aggiornamento?Come assegnare un risultato selezionato a una variabile?
Ecco la mia procedura:
Sto scrivendo uno SQL Server 2005 T-SQL stored procedure che esegue le seguenti operazioni:
- ottiene elenco delle fatture id da tavolo fattura e negozi per Cursore
- Fetch fattura id dal cursore -> tmp_key variabile
- foreach tmp_key trova contatto con il cliente fattura primaria id dalla tabella cliente
- aggiorna il contatto con il cliente chiave con contatto principale id
- vicino cursore
Qui è il mio codice:
DECLARE @tmp_key int
DECLARE @get_invckey cursor
set @get_invckey = CURSOR FOR
select invckey from tarinvoice where confirmtocntctkey is null and tranno like '%115876'
OPEN @get_invckey
FETCH NEXT FROM @get_invckey into @tmp_key
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT c.PrimaryCntctKey as PrimaryContactKey
from tarcustomer c, tarinvoice i
where i.custkey = c.custkey and i.invckey = @tmp_key
UPDATE tarinvoice set confirmtocntctkey = PrimaryContactKey where invckey = @tmp_key
FETCH NEXT FROM @get_invckey INTO @tmp_key
END
CLOSE @get_invckey
DEALLOCATE @get_invckey
Come faccio a memorizzare il PrimaryContactKey e utilizzarlo di nuovo nella clausola serie di l'istruzione di aggiornamento? Creo una variabile cursore o solo un'altra variabile locale con un tipo int?
Come risposte @GilaMonster sotto, questa intera operazione può essere una singola istruzione UPDATE (una "operazione di set-based", da non confondere con un [un'istruzione SET T-SQL] (https : //msdn.microsoft.com/en-us/library/ms189484.aspx)) che è un approccio molto migliore (esecuzione più rapida, meno spese generali e molto meno codice). Sto solo sottolineando questo perché la domanda e tutte le attuali migliori risposte sono su come scrivere una dichiarazione SET, ma non è davvero l'approccio migliore per cominciare. – gregmac