1

我的存储过程有一点问题。它给了我这个错误:

将 varchar 值“Cluj-Napoca”转换为数据类型 int 时转换失败。

这是我的代码:

CREATE PROCEDURE UjVasarlas
@JID int,
@SZID int,
@Nev varchar(30),
@Cim varchar(30),
@Darab int,
@Datum varchar(30)
AS
SET NOCOUNT ON;
DECLARE @maxId int;
        SET @maxId = (SELECT MAX(VevoID) FROM Vevo);
iF EXISTS (SELECT * FROM Vevo WHERE Vevo.VevoNev = @Nev)
    begin
        INSERT INTO Vasarlas VALUES (@maxId+1, @JID, @SZID, @Darab, @Datum)
    end
    else
        INSERT INTO Vevo VALUES (@maxId+1, @Nev, @Cim, 1)
        INSERT INTO Vasarlas VALUES (@maxId+1, @JID, @SZID, @Darab, @Datum)

 GO     

 EXEC UjVasarlas 2, 2, 'Your Name', 'Your City', 2, '2013-01-22'

如果它有帮助,我可以告诉你它的用途,但我不想浪费时间......有人可以帮忙吗?... thx 预期 ;)

PS:

现在它有另一个问题:

INSERT 语句与 FOREIGN KEY 约束“FK__Vasarlas__VevoID__47E69B3D”冲突。冲突发生在数据库“master”、表“dbo.Vevo”、列“VevoID”中。

这两个表如下所示:

  • Vasarlas( VevoID, JatekID, SzallitoID, Darab, Datum)
  • Vevo( VevoID, VevoNev, OrszagID, Cim)
4

2 回答 2

3

我的猜测是您的表架构与您插入的列不匹配,请尝试明确指定您的列

INSERT INTO Vasarlas(col1, col2, col3, col4, col5) 
VALUES (@maxId+1, @JID, @SZID, @Darab, @Datum)

获取列列表的最简单方法是从 SQL Server Management Studio 的资源管理器中拖放它们。

于 2013-01-25T00:33:20.470 回答
0

您有三个 varchar 参数,@Nev、@Cim 和 @Datum。

似乎您尝试将其中一个插入整数列。检查 Vasarlas 和 Vevo 表或更好地捕获开始结束块以确定哪个插入语句导致错误...

顺便一提; EXEC UjVasarlas 2, 2, 'Your Name', 'Your City', 2, '2013-01-22' 无法返回未包含在您发送的参数中的“Cluj-Napoca”字符串的错误。

如果“Cluj-Napoca”在“您的城市”空间中,则意味着您的问题是 @Cim 参数。你只在一个地方使用它,在其他博客中;插入 Vevo 值(@maxId+1、@Nev、@Cim、1)

检查表Vevo,可能该表的第 3 列(您尝试插入 @Cim 参数)是 INT 而不是 VARCHAR

于 2013-01-25T00:38:01.583 回答