C# 将DataTable插入/更新到SQL Server错误:提供的列名称或值数与表定义不匹配
我尝试了以下解决方案,尝试将数据表插入/更新到sql server中,但出现了一些问题C# 将DataTable插入/更新到SQL Server错误:提供的列名称或值数与表定义不匹配,c#,sql-server,C#,Sql Server,我尝试了以下解决方案,尝试将数据表插入/更新到sql server中,但出现了一些问题 我创建了一个表:People 创建表[dbo].[People]( [ID][varchar](10)不为空, [Name][varchar](50)空, [Email][varchar](50)空, [Country][varchar](50)空 )在[小学] 创建用户定义的表类型:PeopleType 将类型[dbo].[PeopleType]创建为表( [ID][varchar](10)不为空, [N
创建表[dbo].[People](
[ID][varchar](10)不为空,
[Name][varchar](50)空,
[Email][varchar](50)空,
[Country][varchar](50)空
)在[小学]
将类型[dbo].[PeopleType]创建为表(
[ID][varchar](10)不为空,
[Name][varchar](50)空,
[电邮][varchar](50)空
)
CREATE PROCEDURE[dbo].[Update\u People]
@tblpeople PeopleType只读
作为
开始
不计数;
融入人群
使用@tblpeople p2
在p1.ID=p2.ID上
当匹配时
更新集p1.Name=p2.Name
,p1.Email=p2.Email
当不匹配时
插入值(p2.ID、p2.Name、p2.Email);
结束
但是,当我尝试使用用户定义的表类型创建过程时,发生了一个SQL server错误
“提供的值的列名或数目与表定义不匹配。”
我做错了什么或遗漏了什么吗?如果您不想添加国家/地区,请将您的
Insert
语句更改为:
INSERT INTO People(Id, Email, Name) VALUES(p2.ID, p2.Name, p2.Email);
收到错误的原因是,您没有指定要使用Insert
语句的列,因为表中定义了4。但你只提供3个
另一个选项是将Country属性添加到用户定义的类型,并使用以下步骤添加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);
插入值(p2.ID、p2.Name、p2.Email)代码>国家在哪里?我只想在人员表中插入ID、姓名、电子邮件,而不是所有列。因此,我只将ID、名称、电子邮件定义为用户定义的表类型。请尝试插入值(p2.ID、p2.Name、p2.Email,默认值)
没问题,很乐意提供帮助