が、私は別のテーブルから値を挿入しようとしているテーブルの定義と一致していません。列名または指定された値の数は、以下のクエリを使用して、SQL Serverで
が助けてください:
Column name or number of supplied values does not match table definition.
は、私は両方のテーブルが同じ構造、列名と同じデータ型を持つことを確信しています!あなたが望むことは何
が、私は別のテーブルから値を挿入しようとしているテーブルの定義と一致していません。列名または指定された値の数は、以下のクエリを使用して、SQL Serverで
が助けてください:
Column name or number of supplied values does not match table definition.
は、私は両方のテーブルが同じ構造、列名と同じデータ型を持つことを確信しています!あなたが望むことは何
彼らは同じ構造を持っていない...私は、彼らが異なる
ある保証することができ、私はあなたがすでにそれを作成して知っている... There is already an object named ‘tbltable1’ in the database
が、これも(これはあなたの他の問題)が修正されます。列名を指定することは常に良いです挿入用
Drop table tblTable1
select * into tblTable1 from tblTable1_Link
DECLARE @Table TABLE(
Val1 VARCHAR(MAX)
)
INSERT INTO @Table SELECT '1'
以下を参照してください
デフエラー
DECLARE @Table TABLE(
Val1 VARCHAR(MAX),
Val2 VARCHAR(MAX)
)
INSERT INTO @Table SELECT '1'
Msg 213, Level 16, State 1, Line 6 Insert Error: Column name or number of supplied values does not match table definition.
しかし
DECLARE @Table TABLE(
Val1 VARCHAR(MAX),
Val2 VARCHAR(MAX)
)
INSERT INTO @Table (Val1) SELECT '1'
作品に上記の変更が発生するために、テーブルを変更し、正常に動作します。あなたは、構造体を提供する列が
を指定して、より具体的である必要があり、我々は見て列のプレフィックスがクエリで使用されるテーブル名またはエイリアス名と一致しないを持つことができます。それだけでテーブルを削除クエリ
http://sqlerrormessages.blogspot.com/2009/08/sql-server-error-messages-msg-107.html
の小さな変更を加える必要が来ている理由私が見つけた私も
ノースウエストこのエラーを解決するために働いていた
は私のためのオプションではありませんでした、私は実行中のログを保持しているからです。私が挿入する必要があるたびに落ちなければならないと、テーブルは無意味になります。
私のエラーは、これらの固定問題を変更して、他の列の製品であるcreate tableステートメントに2つの列があったためです。例えば
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
これは古い記事ですが、私はあなたが
insert into blah
select * from blah2
のようなものを持っているし、何とかしてblah2場合、計算カラムは、この同じエラーがスローされますことを心に留めて、同一キープしていることにも言及したいと思います...
は、私はちょうど上の障害が発生したと私は私の例では
insert into blah (cola, colb, colc)
select cola, colb, colc from blah2
をしようとしたとき、それは計算列が問題を作る
(最初と最後から計算、など)フルネームフィールドがあったことに気づきました。 SELECT *
は使用しないでください。計算後のフィールドを除いてSELECTの後に各フィールドを指定する必要があります
良い解決策を見つけたら幸いです。 私は同じ問題を抱えていました。私はその問題を回避する方法はおそらく最高ではありませんが、現在は機能しています。
これは、リンクされたサーバーを作成し、動的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
これは私のために今働いています。 ストアドプロシージャから返される列の数と型は、ストアドプロシージャから同じテーブルを返すだけなので、このテーブルと同じです。
おかげに関して マルセロ
問題は、あなたが列を使用せずにデータベースにデータを挿入しようとしているということです。 SQL Serverはそのエラーメッセージを表示します。
エラー:insert into users values('1', '2','3')
- これは限り、あなたは4列を持っているだけで、それらの3
正しいに挿入したい場合は、わずか3列
を持って正常に動作します:このことができますinsert into users (firstName,lastName,city) values ('Tom', 'Jones', 'Miami')
希望を
は私にとって犯人は、EMPに給与
挿入に割り当てられたint型の値であり、給与欄のloyees(ID、姓、姓、性別、給与)の値(3、 'カナダ'、 'PA'、 'M'、15000)
我々はコンパイラ15,000を割り当てる15と000
を理解しますこの修正は私のためにうまくいきます。 従業員(ID、姓、性別、給与)の値(4、 '米国'、 'サム'、 'm'、15000)
IDを確認してくださいIDはNULLではありませんID(1,1) テーブルを作成してテーブルを作成してからテーブルを作成する前に 2日後に私はこの問題を解決しました..
もう1つの可能性は、 TEMP DBと挿入するDBが一致しません。 –