カラム名または指定された値の数がテーブル定義と一致しない
SQLサーバーでは、以下のクエリを使用して、あるテーブルから別のテーブルに値を挿入しようとしています。
delete from tblTable1
insert into tblTable1 select * from tblTable1_Link
次のようなエラーが発生しています。
列名または供給された値の数がテーブル定義と一致しません。
どちらのテーブルも同じ構造、同じ列名、同じデータ型であることは確認しています。
よろしくお願いします。
42
12
同じ構造ではありません...。違っていると断言できます
もう作ったんでしょうが...。データベースには、すでに「tbltable1」という名前のオブジェクトがあります。
あなたが欲しいのはこれかもしれません(あなたの別の問題も解決されます)。
挿入の際には、常にカラム名を指定した方が良いでしょう、以下を参照してください。
は正常に動作しますが、テーブルの定義を変更するとエラーになります。
Msg 213, レベル16, 状態1, 行6
しかし、上記のように変更すると
に変更すると動作します。もっと具体的に列を指定する必要があります。
構造体を提供していただければ、私たちが見てみましょう。
これは古い投稿ですが、何かあったらそのことも触れておきたいと思います。
計算された列はこれと同じエラーをスローすることを覚えておいてください。..
上記が失敗して試したことに気づきました。
私の例では、フルネームフィールドでした(最初と最後から計算など)。
問題は、列を使用せずにデータベースにデータを挿入しようとしていることです。 Sqlサーバーはそのエラーメッセージを提供します。
エラー:
ユーザーの値に挿入( '1'、 '2'、 '3')
-これは、列が3つしかない場合に正常に機能します。4列あるが、そのうちの3列にのみ挿入したい場合。
正しい:
ユーザー(firstName、lastName、city)値( 'Tom'、 'Jones'、 'Miami')
に挿入します。これが役立つことを願っています。
ランニングログを維持しているため、テーブルを落とすことは選択肢ではありませんでした。 挿入する必要があるたびにドロップする必要がある場合、テーブルは無意味になります。
私のエラーは、他の列の製品であるcreate tableステートメントに2つの列があり、これらを変更すると問題が修正されたためです。 例えば。
IDがIDであることを確認します。IDである場合は、IDがnullではないことを確認してくださいIdentity(1,1)。 テーブルを作成する前に、テーブルをドロップしてからテーブルを作成します。. 2日後、私はこの問題を解決しました。.
SQLサーバー2016/2017 / ...に更新。 データベースをインポートおよびエクスポートするためのいくつかの手順を保存しています。 spでは、(とりわけ)RESTORE FILELISTONLY FROM DISKを使用して、aを作成します。 ファイルからの復元用のテーブル「#restoretemp」。
SQLサーバー2016では、MSがフィールド SnapshotURL nvarchar(360)(rl Azureを復元)を追加し、エラーメッセージの原因を突き止めました。 追加フィールドを強化した後、復元が再び機能しました。 コードが切り取られました(最後のフィールドを参照):。
トリガーに注意してください。 多分問題は挿入された行のトリガーにある程度の操作にあります。
カラムのプレフィックスが、クエリで使用されているテーブル名やエイリアス名と一致しない。
また、このエラーを解決するために
原因がわかりました。ただ、クエリを少し変更する必要があります。
http://sqlerrormessages.blogspot.com/2009/08/sql-server-error-messages-msg-107.html
計算された列が問題を引き起こします。 「SELECT *」は使用しないでください。 計算フィールドを除いて、SELECTの後に各フィールドを指定する必要があります。
良い解決策を見つけたと思います。 私も同じ問題を抱えていましたが、回避方法はおそらく最高ではありませんが、現在は機能しています。
リンクされたサーバーを作成し、動的sqlを使用することが含まれます-最高ではありませんが、誰かがより良いものを提案できる場合は、コメント/回答してください。
これは今私のために働いています。 保存された手順から同じテーブルを返すという理由だけで、保存された手順によって返される列の数と列のタイプがこのテーブルと同じであることを保証できます。
よろしくお願いします。 マルセロ。
私にとって、犯人は給与に割り当てられたint値です。
従業員(ID、FirstName、LastName、Gender、Salary)の値(3、「Canada」、「pa」、「m」、15,000)に挿入します。
給与列15,000を割り当てると、コンパイラは15と000を理解します。
この修正は私には問題ありません。 従業員(ID、FirstName、LastName、Gender、Salary)の値(4、 'US'、 'sam'、 'm'、15000)に挿入します。