Nama kolom atau jumlah dari nilai-nilai yang disediakan tidak sesuai dengan definisi meja

Di SQL server, saya mencoba untuk memasukkan nilai-nilai dari satu meja ke yang lain dengan menggunakan query di bawah ini:

delete from tblTable1

insert into tblTable1 select * from tblTable1_Link

Saya mendapatkan error berikut:

Kolom nama atau jumlah dari nilai-nilai yang disediakan tidak sesuai dengan definisi tabel.

Saya yakin bahwa kedua tabel memiliki struktur yang sama, yang sama dengan nama kolom dan tipe data yang sama.

Mohon bantuan!

Mengomentari pertanyaan (2)
Larutan

Mereka don't memiliki struktur yang sama... saya bisa menjamin mereka berbeda

Aku tahu kau've sudah dibuat itu... sudah Ada sebuah benda bernama 'tbltable1' dalam database

Apa yang anda mungkin ingin ini (yang juga memperbaiki masalah lain):

Drop table tblTable1

select * into tblTable1 from tblTable1_Link
Komentar (0)

untuk sisipan itu selalu lebih baik untuk menentukan nama kolom seperti berikut

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'

bekerja dengan baik, mengubah tabel def untuk menyebabkan kesalahan

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

INSERT INTO @Table SELECT '1'

Msg 213, Tingkat 16, Negara bagian 1, Baris 6 Menyisipkan Error: nama Kolom atau nomor disediakan nilai-nilai yang tidak sesuai dengan tabel definisi.

Tapi perubahan atas untuk

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

INSERT INTO @Table (Val1)  SELECT '1'

karya-karya. Anda perlu untuk lebih spesifik dengan kolom yang ditentukan

pasokan struktur dan kita bisa melihat-lihat

Komentar (0)

Ini adalah posting yang lebih tua tapi aku ingin juga menyebutkan bahwa jika anda memiliki sesuatu seperti

insert into blah
       select * from blah2

dan bla dan blah2 identik diingat bahwa kolom dihitung akan melemparkan kesalahan yang sama...

Aku baru sadar bahwa ketika di atas gagal dan saya mencoba

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

Dalam contoh saya itu fullname bidang (dihitung dari pertama dan terakhir, dll)

Komentar (1)

Masalahnya adalah bahwa anda mencoba untuk memasukkan data ke database tanpa menggunakan kolom. Sql server memberikan pesan kesalahan.

kesalahan: insert into user values('1', '2','3') - ini bekerja baik-baik saja selama anda hanya memiliki 3 kolom

jika anda memiliki 4 kolom, tetapi hanya ingin memasukkan ke 3 dari mereka

benar: insert into users (nama depan,nama belakang,kota) values ('Tom', 'Jones', 'Miami')

semoga ini bisa membantu

Komentar (0)

Menjatuhkan meja itu bukan pilihan bagi saya, karena saya'm menjaga menjalankan log. Jika setiap waktu yang saya butuhkan untuk menyisipkan saya harus drop, meja akan menjadi tidak berarti.

Kesalahan saya adalah karena saya memiliki beberapa kolom dalam pernyataan create table itu adalah produk dari kolom lain, perubahan ini tetap masalah saya. misalnya

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
Komentar (0)

cek id adalah Identitas , jika hal ini maka pastikan ada ID not null Identity(1,1) dan sebelum membuat table , Drop table, dan kemudian membuat tabel.. Setelah 2 hari saya soal saya masalah ini..

Komentar (0)

Update untuk SQL server 2016/2017/... Kami memiliki beberapa prosedur yang tersimpan dalam tempat untuk impor dan ekspor database. Di sp kita gunakan (antara lain) FILELISTONLY gulung balik DARI DISK di mana kita membuat meja "#restoretemp" untuk memulihkan dari file.

Dengan SQL server 2016, MS telah menambahkan bidang SnapshotURL nvarchar(360) (mengembalikan url Azure) apa yang telah menyebabkan pesan kesalahan. Setelah saya telah meningkatkan lapangan tambahan, pemulihan telah bekerja lagi. Kode dipotong (lihat bidang terakhir):

 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
Komentar (1)

Waspadai pemicu. Mungkin masalah ini adalah dengan beberapa operasi di pelatuk untuk dimasukkan baris.

Komentar (0)

awalan kolom tidak sesuai dengan nama tabel atau nama alias yang digunakan dalam query.

Saya juga bekerja untuk mengatasi kesalahan ini

Nw saya menemukan mengapa itu datang hanya perlu untuk membuat perubahan kecil dalam query

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

Komentar (0)

Computed kolom membuat masalah. Jangan gunakan SELECT *. Anda harus menentukan masing-masing bidang setelah PILIH kecuali computed bidang

Komentar (0)

Saya harap anda telah menemukan solusi yang baik. Aku punya masalah yang sama, dan cara saya bekerja di sekitar itu mungkin bukan yang terbaik tapi itu bekerja sekarang.

ini melibatkan menciptakan linked server dan menggunakan dynamic sql - bukan yang terbaik, tapi jika ada yang bisa menunjukkan sesuatu yang lebih baik, silakan komentar/jawaban.

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

ini bekerja untuk saya sekarang. Saya dapat menjamin jumlah kolom dan tipe kolom yang dikembalikan oleh disimpan prosedur yang sama seperti dalam tabel ini, hanya karena aku kembali meja yang sama dari prosedur yang tersimpan.

terima kasih dan salam marcelo

Komentar (0)

Bagi saya pelakunya adalah int nilai yang diberikan untuk gaji

Insert into Pegawai(ID,nama depan,nama Belakang,jenis Kelamin,Gaji) values(3,'Kanada', 'pa', 'm',15,000)

di kolom gaji Ketika kita menetapkan 15,000 compiler memahami 15 000.

Koreksi ini bekerja dengan baik bagi saya. Insert into Pegawai(ID,nama depan,nama Belakang,jenis Kelamin,Gaji) values(4,'KAMI', 'sam', 'm',15000)

Komentar (0)