存储过程消息 102,级别 15,状态 1,过程 GetSaleSumByEmp,第 2 行

gaoqian05 2012-06-06 08:27:23
create procedure GetSaleSumByEmp
@sum(salesum) output,
@year int,
@month int,
@empid nchar(10)
as
begin
select @sum=sum(sale.salesum)
from sale,employee
where sale.empid=employee.empid
and year(saledate)=@year
and month(saledate)=@month
group by sale.empid
having saleid=@saleid
end

消息 102,级别 15,状态 1,过程 GetSaleSumByEmp,第 2 行
'(' 附近有语法错误。
消息 137,级别 15,状态 1,过程 GetSaleSumByEmp,第 8 行
必须声明标量变量 "@sum"。


怎么改啊?帮帮忙吧
...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 5 楼 的回复:

引用 4 楼 的回复:

一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。
你改一下长度就好了。第九行的错误应该是第六行的变量声明错误才产生的。

兄弟,numeric整数部分最大有38位,按错键盘了吧

嗯,好吧,我错了。那是看网上人家空间里写的,如此便无法查出错误了。不过SQL……
[/Quote]
1楼的没有问题,你出现错误,是不是你调用的仍然是以前的存储过程,并没有alter procedure 。
shnaying1945 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。
你改一下长度就好了。第九行的错误应该是第六行的变量声明错误才产生的。

兄弟,numeric整数部分最大有38位,按错键盘了吧
[/Quote]
嗯,好吧,我错了。那是看网上人家空间里写的,如此便无法查出错误了。不过SQL Server 2008运行结果表明,1楼的回答已经没有错误了,不知道2楼的错误怎么来的。
叶子 2012-06-06
  • 打赏
  • 举报
回复

create procedure GetSaleSumByEmp
--@sum(salesum) output, --输出变量 需要有类型 不能有括号在这
@sum float output,
@year int,
@month int,
@empid nchar(10)
as
begin
select @sum=sum(sale.salesum)
from sale,employee
where sale.empid=employee.empid
and year(saledate)=@year
and month(saledate)=@month
group by sale.empid
--having saleid=@saleid
end
bean_sql 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。
你改一下长度就好了。第九行的错误应该是第六行的变量声明错误才产生的。
[/Quote]
兄弟,numeric整数部分最大有38位,按错键盘了吧
shnaying1945 2012-06-06
  • 打赏
  • 举报
回复
一个 NUMERIC型数据的整数部分最大只能有28位,小数部分的位数必须小于或等于整数部分的位数,小数部分可以是零。
你改一下长度就好了。第九行的错误应该是第六行的变量声明错误才产生的。
bean_sql 2012-06-06
  • 打赏
  • 举报
回复

if OBJECT_ID('employee','u') is not null drop table employee
go
if OBJECT_ID('sale','u') is not null drop table sale
go
create table employee
(
empid int
)
go
insert into employee select 1
go
create table sale
(
salesum int ,
empid int,
saledate datetime

)
go
insert into sale
select 1,1,GETDATE()
----------------------------------------
if OBJECT_ID('GetSaleSumByEmp','p') is not null drop proc GetSaleSumByEmp
go
create procedure GetSaleSumByEmp
@year int,
@month int,
@empid nchar(10),
@sum numeric(38,2) output
as
begin
select @sum=sum(sale.salesum)
from sale,employee
where sale.empid=employee.empid
and year(saledate)=@year --建议使用[表名.saledate]
and month(saledate)=@month--建议使用[表名.saledate]
group by sale.empid
--having saleid=@saleid --这里有问题,不知道楼主想要过滤的条件
end
go
---调用存储过程
declare @result numeric(38,2)
--楼主注意下 使用存储过程使用output时的语法
exec GetSaleSumByEmp 2012,6,'n',@result output
select @result
/*

---------------------------------------
1.00

(1 row(s) affected)
*/



gaoqian05 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

create procedure GetSaleSumByEmp
@year int,
@month int,
@empid nchar(10),
@sum numeric(38,2) output
as
begin
select @sum=sum(sale.salesum)
from sale,employee
where sale.empid=e……
[/Quote]

还是有错
消息 102,级别 15,状态 1,过程 GetSaleSumByEmp,第 6 行
'(' 附近有语法错误。
消息 137,级别 15,状态 1,过程 GetSaleSumByEmp,第 9 行
必须声明标量变量 "@sum"。
bean_sql 2012-06-06
  • 打赏
  • 举报
回复

create procedure GetSaleSumByEmp
@year int,
@month int,
@empid nchar(10),
@sum numeric(38,2) output
as
begin
select @sum=sum(sale.salesum)
from sale,employee
where sale.empid=employee.empid
and year(saledate)=@year --建议使用[表名.saledate]
and month(saledate)=@month--建议使用[表名.saledate]
group by sale.empid
--having saleid=@saleid --这里有问题,不知道楼主想要过滤的条件
end

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧