首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL将值赋值给局部变量从表中取出

SQL将值赋值给局部变量从表中取出
EN

Stack Overflow用户
提问于 2014-12-10 11:35:07
回答 3查看 4.1K关注 0票数 1

这是我的过程,它决定了classId和liveareaId为动物插入到表中

代码语言:javascript
复制
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不能工作吗?

代码语言:javascript
复制
SET @classid =  

(SELECT Id
 FROM dbo.Class 
 WHERE dbo.Class.Name=@classname)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-10 11:49:09

这是因为您已经将@classname声明为nvarchar而没有指定长度。当在nvarchar变量声明语句中未指定长度时,默认长度为1。

声明为:

代码语言:javascript
复制
CREATE PROCEDURE insertAnimal
@name nvarchar(10),
@birthyear int,
@classname nvarchar(10),
@livearea nvarchar(10)
...
票数 1
EN

Stack Overflow用户

发布于 2014-12-10 11:37:38

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-12-10 11:42:20

在调用页面/查询中的过程以及数据库中的示例数据时,您能告诉我们哪些参数是经过您的吗?

根据页面中的参数,数据似乎不存在于数据库中。

确保作为参数传递的@classname和@liveareaid数据必须分别位于数据库表dbo.Class和dbo.LiveArea中。

首先在SQL server.Does中尝试下面的查询,它提供任何相同参数的输出?

代码语言:javascript
复制
SELECT Id FROM dbo.Class  WHERE dbo.Class.Name = @classname
SELECT Id FROM dbo.LiveArea  WHERE Name = @livearea
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27400015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档