列名或所提供值不匹配表定义的数(Column name or number of supplied

2019-06-17 11:13发布

在SQL Server中,我试图通过使用下面的查询,以从一个表插入到另一个值:

delete from tblTable1

insert into tblTable1 select * from tblTable1_Link

我收到以下错误:

列名或提供值的数目不匹配表定义。

我相信,这两个表具有相同的结构,相同的列名和相同的数据类型。

请帮忙!

Answer 1:

他们不具有相同的结构。我可以保证,他们是不同的

我知道你已经创造了它...... 已经有一个名为“tbltable1”的对象在数据库中

你可能想这是(这也解决您的另一个问题):

Drop table tblTable1

select * into tblTable1 from tblTable1_Link


Answer 2:

对于插入它始终是更好地指定列名请参见以下

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'

做工精细,变化表DEF到导致错误

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'

消息213,级别16,状态1,行6插入错误:列名或提供值的数目不匹配表定义。

但改变以上

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table (Val1)  SELECT '1'

作品。 与指定的列你需要更具体

供应结构,我们可以看看



Answer 3:

这是一个老的文章,但我想还提到,如果你有类似的东西

insert into blah
       select * from blah2

与胡说和blah2是相同的请紧记,计算列会抛出同样的错误......

我刚刚意识到,当上面的失败,我试着

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

在我的例子是全名字段(从第一个和最后等来计算)



Answer 4:

问题是,你想不使用的列插入数据到数据库中。 SQL SERVER为您提供了错误信息。

错误: insert into users values('1', '2','3') -这只要你只有3列工作正常

如果你有4列,但只希望插入其中3

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

希望这可以帮助



Answer 5:

删除表是不是我的选择,因为我保持一个运行日志。 如果每次我需要插入我的时间不得不放弃,该表将失去意义。

我的错误是因为我曾在create table语句一对夫妇列那名其他列的产品,改变这些固定我的问题。 例如

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


Answer 6:

列前缀不匹配查询中使用的表名或别名。

我还在努力解决这个错误

NW我发现它为什么只正在添加需要作出查询的微小变化

http://sqlerrormessages.blogspot.com/2009/08/sql-server-error-messages-msg-107.html



Answer 7:

计算列使问题。 不要使用SELECT * 。 除了计算领域,您必须指定SELECT后各领域



Answer 8:

我希望你找到了一个很好的解决方案。 我有同样的问题,我周围的工作方式可能不是最好的,但现在运转。

它涉及到创建链接的服务器,并使用动态SQL - 不是最好的,但如果有人能提出更好的东西,请评论/答案。

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

这是现在为我工作。 我可以保证列和存储过程返回的列的类型的数量是相同的,如下表,仅仅是因为我从存储过程返回相同的表。

感谢和问候马塞洛



Answer 9:

对我来说,罪魁祸首是分配给工资int值

插入雇员(ID,名字,姓氏,性别,薪水)值(3, '加拿大', 'PA', 'M',15000)

在工资列。当我们分配15000编译器了解15和000。

该校为我工作得很好。 插入雇员(ID,名字,姓氏,性别,薪水)值(4, 'US', 'SAM', 'M',15000)



Answer 10:

检查你的id是它的身份,如果是则确保有ID不为空标识(1,1)和创建表,DROP TABLE之前,然后创建表..在2天之后我解决我的这个问题..



Answer 11:

更新到SQL Server二千零十七分之二千零十六/ ...
我们已经制定了一些存储过程来导入和导出数据库。
在我们使用(除其他事项外)RESTORE FILELISTONLY FROM DISK,我们创建表“#restoretemp”从文件中恢复SP。

与SQL Server 2016年,MS已经增加了射门SnapshotURL为nvarchar(360)(恢复URL天青)是什么原因造成的错误消息。
我已经提高了附加字段后,恢复再次合作。
代码剪断(见最后一个字段):

 SET @query = 'RESTORE FILELISTONLY FROM DISK = ' + QUOTENAME(@BackupFile , '''')
CREATE TABLE #restoretemp
(
LogicalName nvarchar(128)
,PhysicalName nvarchar(128)
,[Type] char(1)
,FileGroupName nvarchar(128)
,[Size] numeric(20,0)
,[MaxSize] numeric(20,0)
,FileID bigint
,CreateLSN numeric(25,0)
,DropLSN numeric(25,0) NULL
,UniqueID uniqueidentifier
,ReadOnlyLSN numeric(25,0)
,ReadWriteLSN numeric(25,0)
,BackupSizeInByte bigint
,SourceBlockSize int
,FilegroupID int
,LogGroupGUID uniqueidentifier NULL
,DifferentialBaseLSN numeric(25,0)
,DifferentialbaseGUID uniqueidentifier
,IsReadOnly bit
,IsPresent bit
,TDEThumbprint varbinary(32)
-- Added field 01.10.2018 needed from SQL Server 2016 (Azure URL)
,SnapshotURL nvarchar(360)
)

INSERT #restoretemp EXEC (@query)
SET @errorstat = @@ERROR
if @errorstat <> 0 
Begin
if @Rueckgabe = 0 SET @Rueckgabe = 6
End
Print @Rueckgabe


Answer 12:

当心触发器。 也许问题出在触发器插入的行某些操作。



文章来源: Column name or number of supplied values does not match table definition