sql数据库问题 我想利用存储过程计算个人得分 但是 return value 0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql数据库问题 我想利用存储过程计算个人得分 但是 return value 0相关的知识,希望对你有一定的参考价值。
执行后的存储过程如下
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[p_scoreconvert1] @员工编号 int
as
begin
declare @论文个人得分 int
declare @论文参加人数 int
declare @刊物级别 char(50)
declare @论文分工 char(50)
declare @姓名 char(50)
declare @论文编号 int
declare @时间 datetime
set @刊物级别=(select 刊物级别 from 论文 a,撰写 b where b.员工编号=@员工编号 and a.论文编号=b.论文编号)
set @论文分工=(select 论文分工 from 撰写 a where a.员工编号=@员工编号)
set @论文参加人数=(select count(论文编号) from 撰写 where 论文编号=(select 论文编号 from 撰写 where 员工编号=@员工编号))
set @姓名=(select 姓名 from 教职员工 a,撰写 b where a.员工编号=@员工编号 and a.员工编号=b.员工编号)
set @时间=(select 时间 from 论文 a,撰写 b where a.论文编号=b.论文编号 and b.员工编号=@员工编号)
begin
if @刊物级别='核心刊物' set @论文个人得分=100
else if @刊物级别='一般刊物' set @论文个人得分=90
else if @刊物级别='报纸杂志' set @论文个人得分=80
else if @刊物级别='会议论文' set @论文个人得分=70
begin
if @论文分工='主持人' set @论文个人得分=@论文个人得分*0.6
else if @论文分工='参加人1' set @论文个人得分=(@论文个人得分*0.4)/(@论文参加人数-1)
end
end
print '员工编号:'+str(@员工编号)+'姓名:'+@姓名+'论文得分为:'+str(@论文个人得分,5,1)
end
执行结果
消息 512,级别 16,状态 1,过程 p_scoreconvert1,第 11 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
消息 512,级别 16,状态 1,过程 p_scoreconvert1,第 12 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
消息 512,级别 16,状态 1,过程 p_scoreconvert1,第 13 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
消息 512,级别 16,状态 1,过程 p_scoreconvert1,第 14 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
消息 512,级别 16,状态 1,过程 p_scoreconvert1,第 15 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
(1 行受影响)
select 论文分工 from 撰写 a where a.员工编号=@员工编号)
这里面返回了不止一个值,是结果集
你相当于用一个变量=一个结果集了,所以出错了 参考技术A 语法不对
set @刊物级别=(select 刊物级别 from 论文 a,撰写 b where b.员工编号=@员工编号 and a.论文编号=b.论文编号)
set @论文分工=(select 论文分工 from 撰写 a where a.员工编号=@员工编号)
set @论文参加人数=(select count(论文编号) from 撰写 where 论文编号=(select 论文编号 from 撰写 where 员工编号=@员工编号))
set @姓名=(select 姓名 from 教职员工 a,撰写 b where a.员工编号=@员工编号 and a.员工编号=b.员工编号)
set @时间=(select 时间 from 论文 a,撰写 b where a.论文编号=b.论文编号 and b.员工编号=@员工编号)
改成
select @刊物级别=刊物级别 from 论文 a,撰写 b where b.员工编号=@员工编号 and a.论文编号=b.论文编号
select @论文分工=论文分工 from 撰写 a where a.员工编号=@员工编号
select @论文参加人数=count(论文编号) from 撰写 where 论文编号=(select 论文编号 from 撰写 where 员工编号=@员工编号)
select @姓名=姓名 from 教职员工 a,撰写 b where a.员工编号=@员工编号 and a.员工编号=b.员工编号
select @时间=时间 from 论文 a,撰写 b where a.论文编号=b.论文编号 and b.员工编号=@员工编号
stored procedure --存储过程
存储过程(Stored Procedure),计算机用语,是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。经编译后存储在数据库中。存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。
CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] [(参数#1,…参数#1024)] [WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION ] [FOR REPLICATION] AS 程序行 GO
以上是关于sql数据库问题 我想利用存储过程计算个人得分 但是 return value 0的主要内容,如果未能解决你的问题,请参考以下文章