这是我的程序,它确定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',table' ZOO.dbo.Animal&#39 ;;列不允许空值。 INSERT失败。
为什么ClassId
为空,你能否告诉我为什么威尔不行。
SET @classid =
(SELECT Id
FROM dbo.Class
WHERE dbo.Class.Name=@classname)
答案 0 :(得分:1)
这是因为您已将@classname
声明为nvarchar
并且未指定长度。如果未在nvarchar
变量声明语句中指定length,则默认长度为1.
声明为:
CREATE PROCEDURE insertAnimal
@name nvarchar(10),
@birthyear int,
@classname nvarchar(10),
@livearea nvarchar(10)
...
答案 1 :(得分:0)
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
AND dbo.Class.Id IS NOT NULL)
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
答案 2 :(得分:0)
您可以在调用页面/查询中的过程以及数据库中的示例数据时告诉我们您通过了哪些参数吗?
根据您在页面中的参数,数据库中似乎不存在数据。
确保您作为参数传递的@classname和@liveareaid数据,必须分别在数据库表dbo.Class和dbo.LiveArea中。
首先在SQL server中尝试以下查询。它是否通过相同的参数提供任何输出?
SELECT Id FROM dbo.Class WHERE dbo.Class.Name = @classname
SELECT Id FROM dbo.LiveArea WHERE Name = @livearea