关于存储过程的困惑

时间:2015-01-26 13:27:23

标签: sql stored-procedures

我编写了一个存储过程,用于将数据插入到我的表中。这些是我的表格列,其数据类型为:

Ad nvarchar(150),
Yazar nvarchar(150),
SayfaSayisi smallint,
KategoriId int
Gmc datetime,
HostName  nvarchar(150)

问题是GmcHostName有自己的默认值。所以我不能在存储过程中使用这两个。

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)

这样做的正确方法是什么?

3 个答案:

答案 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

中使用之前,您必须计算并设置值为@Id变量
  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)