Utilice el cursor con 2 tablas para insertar filas.
Tengo 2 tablas: “items” y “cost”.
En la tabla “items”, tengo el código antiguo del artículo y el código nuevo del artículo.
En la tabla “cost”, tengo el código del artículo y el costo.
Quiero crear nuevas filas en la tabla “cost” para el código nuevo del artículo de acuerdo con el costo que ya existe para el código antiguo del artículo.
Por ejemplo:
Espero ver este resultado después de ejecutar el cursor en la tabla “cost”:
Intento ejecutar esto, pero lleva mucho tiempo y duplica cada fila 100000 veces:
DECLARE @item_code_old nvarchar (50)
DECLARE @item_code_new nvarchar (50)
DECLARE CostCURSOR CURSOR FOR
SELECT item_code_old, item_code_new
FROM item
WHERE company = ‘AEW’ AND item_code_new IS NOT NULL
OPEN CostCURSOR
FETCH NEXT FROM CostCURSOR INTO @item_code_old, @item_code_new
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @item_code_old = item_code_old
FROM cost
WHERE company = ‘AEW’ AND year = 2021
INSERT INTO cost
SELECT
company,
year,
month,
@item_code_new,
unit_cost
FROM
cost
WHERE
company = 'AEW' AND year = 2021
FETCH NEXT FROM CostCURSOR INTO @item_code_old, @item_code_new
END
CLOSE CostCURSOR
DEALLOCATE CostCURSOR
¿Qué me falta?
davy.ai
El problema con el código proporcionado es que no está utilizando el cursor para extraer la fila correcta de la tabla “cost”. En su lugar, siempre selecciona el costo de la primera fila donde “company = ‘AEW'” y “year = 2021”. Para solucionar esto, se debería utilizar el cursor para obtener el valor correcto de “unit_cost” para el código de producto antiguo, y luego utilizar este valor en la declaración “INSERT” para el código de producto nuevo.
Aquí tienes una versión actualizada del código que debería funcionar:
En esta versión del código, se utiliza el cursor para extraer los valores de
item_code_old
yitem_code_new
de la tablaitems
, al igual que antes. Pero luego se declara una nueva variable@unit_cost
para almacenar el costo unitario del código de producto antiguo.Dentro del bucle
WHILE
, se utiliza una declaraciónSELECT
para obtener el valor correcto de@unit_cost
de la tablacost
, en función del valor de@item_code_old
. Luego, se utiliza una declaraciónINSERT
para agregar una nueva fila a la tablacost
para el código de producto nuevo, con el mismo costo que el código de producto antiguo.La diferencia clave en este código es que se utiliza el cursor para extraer el valor correcto de
unit_cost
de la tablacost
, en lugar de utilizar siempre el mismo valor para cada nueva fila. Esto debería dar como resultado la salida esperada que se muestra en la última imagen.