DataTableをSQLServerに挿入/更新しますエラー:列名または指定された値の数がテーブル定義と一致しません

user3717119

SQLサーバーへのデータテーブルの挿入/更新を試みるために次の解決策を試しましたが、いくつかの問題が発生しました。http://www.aspsnippets.com/Articles/SqlBulkCopy--Bulk-Insert-records-and-Update-existing-rows-if-record-exists-using-C-and-VBNet.aspx

  1. 私はテーブルを作成しました:人々
CREATE TABLE [dbo].[People](
  [ID] [varchar](10) NOT NULL,
  [Name] [varchar](50) NULL,
  [Email] [varchar](50) NULL,
  [Country] [varchar](50) NULL
) ON [PRIMARY]
  1. ユーザー定義のテーブルタイプを作成します:PeopleType
CREATE TYPE [dbo].[PeopleType] AS TABLE(
  [ID] [varchar](10) NOT NULL,
  [Name][varchar](50) NULL,
  [Email][varchar](50) NULL
)
  1. このテーブルタイプを使用してプロシージャを作成しようとしています:Update_People
CREATE PROCEDURE [dbo].[Update_People]
      @tblpeople PeopleType READONLY
    AS
    BEGIN
      SET NOCOUNT ON;
      MERGE INTO People p1
      USING @tblpeople p2
      ON p1.ID=p2.ID
      WHEN MATCHED THEN
      UPDATE SET p1.Name = p2.Name
            ,p1.Email = p2.Email
      WHEN NOT MATCHED THEN
      INSERT VALUES(p2.ID, p2.Name, p2.Email);
    END

しかし、ユーザー定義のテーブルタイプを使用してプロシージャを作成しようとすると、SQLサーバーエラーが発生しました。

列名または指定された値の数がテーブル定義と一致しません。」

私は何か間違ったことをしたか、何かを逃しましたか?

ボヤンB

Insert国を追加したくない場合はステートメントを次のように変更します

INSERT INTO People(Id, Email, Name) VALUES(p2.ID, p2.Name, p2.Email);

エラーが発生する理由は、Insertステートメントを使用する列を指定していないためです。テーブルには4が定義されているため4が必要です。しかし、あなたは3つしか提供しません。

もう1つのオプションは、Countryプロパティをユーザー定義の型に追加し、次の手順で国を追加することです。

CREATE TYPE [dbo].[PeopleType] AS TABLE(
  [ID] [varchar](10) NOT NULL,
  [Name][varchar](50) NULL,
  [Email][varchar](50) NULL,
  [Country][varchar](50) NULL
)

INSERT VALUES(p2.ID, p2.Name, p2.Email, p2.Country);

編集:私はしばらくこれを使用していないので、構文についてはわかりませんが、次のような列名を指定するだけでよい可能性があります:

INSERT (Id, Email, Name) VALUES(p2.ID, p2.Name, p2.Email);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ