MS SQL Server: El nombre de columna o el número de valores suministrados no coincide con la definición de la tabla.
Mi definición de tabla:
CREATE TABLE [dbo].[Action](
[ActionId] [int] IDENTITY(1,1) NOT NULL,
[ActionType] [nvarchar](50) NOT NULL,
[Initiator] [nvarchar](256) NOT NULL,
[Date] [datetime] NOT NULL,
CONSTRAINT [PK_Action] PRIMARY KEY CLUSTERED
(
[ActionId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Código que intento ejecutar:
create trigger delete_on_titles on titles
after delete
as
begin
insert into Action (ActionType, Initiator, Date) values ('Add', USER_NAME(), getdate());
declare @id int = @@identity;
insert into Old_titles select * from deleted
update Old_titles set ActionId = @id where ActionId is null
end
Pero obtengo el mensaje de error:
Msg 213, Level 16, State 1, Procedure delete_on_titles, Line 15 [Batch Start Line 2]
Column name or number of supplied values does not match table definition.
en la línea "insert into Action (ActionType, Initiator, Date) values ('Add', USER_NAME(), getdate());"
¿Qué estoy haciendo mal?
ACTUALIZADO:
Gracias a @Larnu. Sí, el problema estaba en la línea:
insert into Old_titles select * from deleted
Lo cambié por:
insert into Old_titles (
title_id, title, type, pub_id, price,
advance, royalty, ytd_sales, notes, pubdate)
select * from deleted
donde title_id, title, type, pub_id, price, advance, royalty, ytd_sales, notes, pubdate
son columnas de la tabla deleted
, y funciona.
davy.ai
El mensaje de error indica que el número o nombres de las columnas que se están insertando en la tabla ‘Action’ no coinciden con la definición de la tabla. Dado que no podemos ver la definición de la tabla ‘Old_titles’, es probable que el error se encuentre en la línea:
Esto intenta insertar todas las columnas de ‘deleted’ en ‘Old_titles’, pero si las dos tablas tienen diferentes nombres o números de columnas, causará un error al intentar insertar.
Para solucionar esto, debes especificar explícitamente las columnas que se están insertando en ‘Old_titles’ y asegurarte de que coinciden con las columnas en ‘deleted’. Por ejemplo:
Esto asume que ‘title_id, title, type, pub_id, price, advance, royalty, ytd_sales, notes, pubdate’ son las columnas tanto en ‘Old_titles’ como en ‘deleted’. Asegúrate de ajustarlo para que coincida con las definiciones específicas de tus tablas.