Это я моя процедура, которая определяет Classid и liveareaId для животных, чтобы вставить его в таблицуSQL Присвоить значение локальной переменной взять из таблицы
CREATE PROCEDURE insertAnimal
@name nvarchar,
@birthyear int,
@classname nvarchar,
@livearea nvarchar
AS
BEGIN
DECLARE @classid int
DECLARE @liveareaid int
SET @classid =
(SELECT Id
FROM dbo.Class
WHERE dbo.Class.Name = @classname)
SET @liveareaid =
(SELECT Id
FROM dbo.LiveArea
WHERE Name = @livearea)
INSERT INTO dbo.Animal (Name,BirthYear,ClassId,LiveAreaId) VALUES
(
@name,
@birthyear,
@classid,
@liveareaid
)
END
GO
У меня есть ошибка:
Cannot insert the value NULL into column 'ClassId', table 'ZOO.dbo.Animal'; column does not allow nulls. INSERT fails.
Почему ClassId
null, можете ли вы сказать мне, почему это не работает.
SET @classid =
(SELECT Id
FROM dbo.Class
WHERE [email protected])
Существуют данные в таблице классов, и имя_класс поставляются в правых – needermen
[Плохие привычки пинают : объявление VARCHAR без (длина)] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx) - вы должны ** всегда ** предоставляют длину для любых переменных (и) varchar' и параметров, которые вы используете. В противном случае ваши параметры, такие как '@ name',' @ classname' и т. Д., Получат ** ровно 1 символ длиной ** - обычно * не *, что вы хотите! –