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
el prefijo de columna no coincide con un nombre de tabla o alias utilizado en la consulta.
También estaba trabajando para resolver este error
Nw encontré por qué está llegando solo necesita hacer pequeños cambios en la consulta
http://sqlerrormessages.blogspot.com/2009/08/sql-server-error-messages-msg-107.html
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.