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

前端 未结 12 1763
轮回少年
轮回少年 2020-11-29 04:33

In SQL server, I am trying to insert values from one table to another by using the below query:

delete from tblTable1

insert into tblTable1 select * from tb         


        
相关标签:
12条回答
  • 2020-11-29 04:51

    The problem is that you are trying to insert data into the database without using columns. Sql server gives you that error message.

    error: insert into users values('1', '2','3') - this works fine as long you only have 3 columns

    if you have 4 columns but only want to insert into 3 of them

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

    hope this helps

    0 讨论(0)
  • 2020-11-29 04:51

    Update to SQL server 2016/2017/…
    We have some stored procedures in place to import and export databases.
    In the sp we use (amongst other things) RESTORE FILELISTONLY FROM DISK where we create a table "#restoretemp" for the restore from file.

    With SQL server 2016, MS has added a field SnapshotURL nvarchar(360) (restore url Azure) what has caused the error message.
    After I have enhanced the additional field, the restore has worked again.
    Code snipped (see last field):

     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
    
    0 讨论(0)
  • 2020-11-29 04:58

    Beware of triggers. Maybe the issue is with some operation in the trigger for inserted rows.

    0 讨论(0)
  • 2020-11-29 04:59

    This is an older post but I want to also mention that if you have something like

    insert into blah
           select * from blah2
    

    and blah and blah2 are identical keep in mind that a computed column will throw this same error...

    I just realized that when the above failed and I tried

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

    In my example it was fullname field (computed from first and last, etc)

    0 讨论(0)
  • 2020-11-29 05:00

    They don't have the same structure... I can guarantee they are different

    I know you've already created it... There is already an object named ‘tbltable1’ in the database

    What you may want is this (which also fixes your other issue):

    Drop table tblTable1
    
    select * into tblTable1 from tblTable1_Link
    
    0 讨论(0)
  • 2020-11-29 05:01

    Dropping the table was not an option for me, since I'm keeping a running log. If every time I needed to insert I had to drop, the table would be meaningless.

    My error was because I had a couple columns in the create table statement that were products of other columns, changing these fixed my problem. eg

    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
    
    0 讨论(0)
提交回复
热议问题