这是我的过程,它决定了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.data‘;列不允许空值。插入失败。
为什么ClassId是空的,你能告诉我为什么whis不能工作吗?
SET @classid =
(SELECT Id
FROM dbo.Class
WHERE dbo.Class.Name=@classname)发布于 2014-12-10 11:49:09
这是因为您已经将@classname声明为nvarchar而没有指定长度。当在nvarchar变量声明语句中未指定长度时,默认长度为1。
声明为:
CREATE PROCEDURE insertAnimal
@name nvarchar(10),
@birthyear int,
@classname nvarchar(10),
@livearea nvarchar(10)
...发布于 2014-12-10 11:37:38
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发布于 2014-12-10 11:42:20
在调用页面/查询中的过程以及数据库中的示例数据时,您能告诉我们哪些参数是经过您的吗?
根据页面中的参数,数据似乎不存在于数据库中。
确保作为参数传递的@classname和@liveareaid数据必须分别位于数据库表dbo.Class和dbo.LiveArea中。
首先在SQL server.Does中尝试下面的查询,它提供任何相同参数的输出?
SELECT Id FROM dbo.Class WHERE dbo.Class.Name = @classname
SELECT Id FROM dbo.LiveArea WHERE Name = @liveareahttps://stackoverflow.com/questions/27400015
复制相似问题