valores una tabla registros otra nombre los insertar especificados definición datos corresponden columna sql sql-server sql-server-2005 tsql

una - el nombre de columna o los valores especificados no corresponden a la definición de la tabla. sql



El nombre de la columna o el número de valores proporcionados no coincide con la definición de la tabla (10)

Para mí, el culpable es el valor int asignado al salario

Insertar en empleados (ID, Nombre, Apellido, Género, Salario) valores (3, ''Canadá'', ''pa'', ''m'', 15,000)

en columna de salario Cuando asignamos 15,000 el compilador comprende 15 y 000.

Esta corrección funciona bien para mí. Insertar en los valores de los empleados (ID, nombre, apellido, género, salario) (4, ''US'', ''sam'', ''m'', 15000)

En el servidor SQL, intento insertar valores de una tabla a otra usando la siguiente consulta:

delete from tblTable1 insert into tblTable1 select * from tblTable1_Link

Estoy teniendo el siguiente error :

Column name or number of supplied values does not match table definition.

Estoy seguro de que ambas tablas tienen la misma estructura, nombres de columna y el mismo tipo de datos:

¡Por favor ayuda!


para inserciones, siempre es mejor especificar los nombres de las columnas, ver el siguiente

DECLARE @Table TABLE( Val1 VARCHAR(MAX) ) INSERT INTO @Table SELECT ''1''

funciona bien, cambiando la def de la tabla a causa el error

DECLARE @Table TABLE( Val1 VARCHAR(MAX), Val2 VARCHAR(MAX) ) INSERT INTO @Table SELECT ''1''

Msg 213, nivel 16, estado 1, línea 6 Insertar error: el nombre de la columna o el número de valores proporcionados no coincide con la definición de la tabla.

Pero cambiar lo anterior a

DECLARE @Table TABLE( Val1 VARCHAR(MAX), Val2 VARCHAR(MAX) ) INSERT INTO @Table (Val1) SELECT ''1''

trabajos. Debe ser más específico con las columnas especificadas

suministrar las estructuras y podemos echar un vistazo



Dejar caer la mesa no era una opción para mí, ya que estoy manteniendo un registro en funcionamiento. Si cada vez que necesitaba insertar tenía que soltar, la mesa no tendría sentido.

Mi error fue porque tenía un par de columnas en la declaración de crear tabla que eran productos de otras columnas, cambiar estas solucionó mi problema. p.ej

create table foo ( field1 as int ,field2 as int ,field12 as field1 + field2 ) create table copyOfFoo ( field1 as int ,field2 as int ,field12 as field1 + field2) --this is the problem, should just be ''as int'' insert into copyOfFoo SELECT * FROM foo


Esta es una publicación más antigua, pero también quiero mencionar que si tienes algo así como

insert into blah select * from blah2

y blah y blah2 son idénticos, tenga en cuenta que una columna calculada generará el mismo error ...

Me di cuenta de que cuando lo anterior falló y lo intenté

insert into blah (cola, colb, colc) select cola, colb, colc from blah2

En mi ejemplo, era el campo de nombre completo (calculado desde el primero y el último, etc.)


Las columnas calculadas crean el problema. No use SELECT * . Debe especificar cada campo después de SELECT, excepto los campos calculados


Espero que hayas encontrado una buena solución. Tuve el mismo problema, y ​​la forma en que trabajé probablemente no sea la mejor, pero está funcionando ahora.

implica la creación de un servidor vinculado y el uso de sql dinámico, no el mejor, pero si alguien puede sugerir algo mejor, comente / responda.

declare @sql nvarchar(max) DECLARE @DB_SPACE TABLE ( [DatabaseName] NVARCHAR(128) NOT NULL, [FILEID] [smallint] NOT NULL, [FILE_SIZE_MB] INT NOT NULL DEFAULT (0), [SPACE_USED_MB] INT NULL DEFAULT (0), [FREE_SPACE_MB] INT NULL DEFAULT (0), [LOGICALNAME] SYSNAME NOT NULL, [DRIVE] NCHAR(1) NOT NULL, [FILENAME] NVARCHAR(260) NOT NULL, [FILE_TYPE] NVARCHAR(260) NOT NULL, [THE_AUTOGROWTH_IN_KB] INT NOT NULL DEFAULT(0) ,filegroup VARCHAR(128) ,maxsize VARCHAR(25) PRIMARY KEY CLUSTERED ([DatabaseName] ,[FILEID] ) ) SELECT @SQL =''SELECT [DatabaseName], [FILEID], [FILE_SIZE_MB], [SPACE_USED_MB], [FREE_SPACE_MB], [LOGICALNAME], [DRIVE], [FILENAME], [FILE_TYPE], [THE_AUTOGROWTH_IN_KB] ,filegroup ,maxsize FROM OPENQUERY(''+ QUOTENAME(''THE_MONITOR'') + '',''''''+ '' EXEC MASTER.DBO.monitoring_database_details '' +'''''')'' exec sp_executesql @sql INSERT INTO @DB_SPACE( [DatabaseName], [FILEID], [FILE_SIZE_MB], [SPACE_USED_MB], [FREE_SPACE_MB], [LOGICALNAME], [DRIVE], [FILENAME], [FILE_TYPE], THE_AUTOGROWTH_IN_KB, [filegroup], maxsize ) EXEC SP_EXECUTESQL @SQL

esto está funcionando para mí ahora. Puedo garantizar que el número de columnas y el tipo de columnas devueltas por el procedimiento almacenado son los mismos que en esta tabla, simplemente porque devuelvo la misma tabla del procedimiento almacenado.

gracias y saludos marcelo


El problema es que está intentando insertar datos en la base de datos sin usar columnas. El servidor Sql le da ese mensaje de error.

error: insert into users values(''1'', ''2'',''3'') - esto funciona bien siempre que solo tenga 3 columnas

si tienes 4 columnas pero solo quieres insertarlas en 3 de ellas

correcto: insert into users (firstName,lastName,city) values (''Tom'', ''Jones'', ''Miami'')

espero que esto ayude


No tienen la misma estructura ... Puedo garantizar que son diferentes

Sé que ya lo ha creado ... Ya hay un objeto llamado ''tbltable1'' en la base de datos

Lo que puede querer es esto (que también soluciona su otro problema):

Drop table tblTable1 select * into tblTable1 from tblTable1_Link


revise su identificación si es Identidad, si es así, asegúrese de que ID no sea nulo Identidad (1,1) y antes de crear su tabla, coloque la tabla y luego cree la tabla ... Después de 2 días resolví mi problema.