我编写了一个存储过程,用于将数据插入到我的表中。这些是我的表格列,其数据类型为:
Ad nvarchar(150),
Yazar nvarchar(150),
SayfaSayisi smallint,
KategoriId int
Gmc datetime,
HostName nvarchar(150)
问题是Gmc
和HostName
有自己的默认值。所以我不能在存储过程中使用这两个。
Gmc ---> GetDate() (to get insert date)
HostName --> Host_Name( )
因此,当我执行查询时,我收到此错误。
INSERT语句中的列多于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配
这是查询
Create proc Kitap_Insert
@Ad nvarchar(150),
@Yazar nvarchar(150),
@SayfaSayisi smallint,
@KategoriId int
Gmc datetime,
HostName nvarchar(150)
as
Insert into Kitap(Id, Ad, Yazar, SayfaSayisi, KategoriId)
values(@Ad, @Yazar, @SayfaSayisi, @KategoriId)
这样做的正确方法是什么?
答案 0 :(得分:1)
您需要从插入列表中删除ID
Insert into Kitap(Ad,Yazar,SayfaSayisi,KategoriId)
values(@Ad,@Yazar,@SayfaSayisi,@KategoriId)
或为其添加值,如下所示
Insert into Kitap(Id,Ad,Yazar,SayfaSayisi,KategoriId)
values(@ID, @Ad,@Yazar,@SayfaSayisi,@KategoriId)
答案 1 :(得分:0)
而不是:
Insert into Kitap(Id,Ad,Yazar,SayfaSayisi,KategoriId)
values(@Ad,@Yazar,@SayfaSayisi,@KategoriId)
使用:
INSERT INTO Kitap(Ad,Yazar,SayfaSayisi,KategoriId)
VALUES (@Ad,@Yazar,@SayfaSayisi,@KategoriId)
您要求SQL引擎提供id(附加字段)(表中不存在的字段或自动增量字段)并且您没有提供相同的值,因此您的错误here are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement
请从插入查询中删除其他ID。
答案 2 :(得分:0)
您获得的错误是因为您尝试将值插入比Values Clause
中指定的列名更多的列名。
如果表格中有ID
列作为Auto-increment
字段,那么您不必包含ID
列,因此您的插入查询将如下所示: -
Insert into Kitap
(Ad,Yazar,SayfaSayisi,KategoriId)
values
(@Ad,@Yazar,@SayfaSayisi,@KategoriId)
如果您在表格中没有ID
列作为Auto-increment
字段,那么您也会在Value Clause
中为该ID列提供值,因此您的插入查询将如下所示: - < / p>
注意: - 强>
在Insert Query
Declare @Id as INT
SET @ID = ---- set here with some value which will become Primary key(I think)
Insert into Kitap
(Id,Ad,Yazar,SayfaSayisi,KategoriId)
values
(@Id, @Ad,@Yazar,@SayfaSayisi,@KategoriId)