¿Cómo almaceno un valor de campo seleccionado en una variable de una consulta y lo uso en una declaración de actualización?¿Cómo asignar un resultado de selección a una variable?
Aquí es mi procedimiento:
Estoy escribiendo un SQL Server 2005 procedimiento almacenado de T-SQL, que hace lo siguiente:
- consigue lista de facturas de identificación de de la tabla de facturas y tiendas para Cursor
- Fetch Identificación factura desde el cursor -> tmp_key variables
- foreach tmp_key encuentra contacto principal cliente de la factura Identificación de tabla de clientes
- actualiza el contacto con el cliente llave con contacto primario Identificación
- cerca del cursor
Aquí está mi código:
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
¿Cómo almacenar la PrimaryContactKey y usarlo de nuevo en la cláusula conjunto de la siguiente instrucción de actualización? ¿Creo una variable de cursor o simplemente otra variable local con un tipo int?
Como respuestas @GilaMonster abajo, toda esta operación puede ser una declaración única actualización (una "operación de configuración basada", que no debe confundirse con una [sentencia SET T-SQL] (https : //msdn.microsoft.com/en-us/library/ms189484.aspx)) que es un enfoque mucho mejor (ejecución más rápida, menos sobrecarga y significativamente menos código). Solo estoy señalando esto porque la pregunta y todas las respuestas principales actuales son sobre cómo escribir una declaración SET, pero en realidad no es el mejor enfoque para empezar. – gregmac