【发布时间】:2014-12-10 11:35:07
【问题描述】:
这是我的程序,它确定了 Animal 的 classId 和 liveareaId 以将其插入表中
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
我有一个错误:
无法将值 NULL 插入列“ClassId”、表“ZOO.dbo.Animal”;列不允许空值。插入失败。
为什么ClassId 为空,你能告诉我为什么 whis 不起作用。
SET @classid =
(SELECT Id
FROM dbo.Class
WHERE dbo.Class.Name=@classname)
【问题讨论】:
-
类表中有数据,提供的类名是对的
-
Bad habits to kick : declaring VARCHAR without (length) - 您应该始终为您使用的任何
(n)varchar变量和参数提供长度。否则,您的参数(如@name、@classname等)最终会正好是 1 个字符 - 通常不是您想要的!