Nat*_*afa 1 sql-server types stored-procedures
嘿家伙我写了一个程序将整数转换为十进制,但每当我执行该程序时,我得到这个错误:
消息8115,级别16,状态8,过程等级插入,第9行
算术溢出错误将数字转换为数据类型数字.消息8115,级别16,状态8,过程等级插入,第10行
算术溢出错误将数字转换为数据类型数字.
这是我创建的表.
CREATE TABLE French
(
StudentId int Primary key,
StudentName varchar(75),
Class varchar (15),
SubjectName varchar(25) DEFAULT ('Mathematics'),
FirstPeriod int,
SecondPeriod int,
ThirdPeriod int,
FirstSemesterExam int,
FirstSemesterAvg decimal(2,2),
FourthPeriod int,
FifthPeriod int,
SixPeriod int,
SecondSemesterExam int,
SecondSemesterAvg decimal(2,2)
)
Run Code Online (Sandbox Code Playgroud)
这是程序及其调用方式.
create proc gradesInsert
@StuId int, @p1 int, @p2 int, @p3 int, @firstExam int,
@p4 int, @p5 int, @p6 int, @SecondExam int
As
declare @add1 int = @p1 + @p2 + @p3 + @firstExam
declare @add2 int = @p4 + @p2 + @p6 + @SecondExam
declare @firstAvg decimal(2,2) = cast(@add1 / 4.0 as decimal(2,2))
declare @SecondAvg decimal(2,2) = cast(@add2 / 4.0 as decimal(2,2))
begin
update dbo.French
Set FirstPeriod = @p1,
SecondPeriod = @p2,
ThirdPeriod = @p3,
FourthPeriod =@p4,
FirstSemesterExam = @firstExam,
FirstSemesterAvg = @firstAvg,
FifthPeriod = @p5,
SixPeriod = @p6,
SecondSemesterExam = @SecondExam,
SecondSemesterAvg = @SecondAvg
where
dbo.French.StudentId = @StuId
end
Exec gradesInsert 1, 90, 98, 77, 69, 70, 72, 99, 100
Run Code Online (Sandbox Code Playgroud)
我希望学生平均值在点的左边有两个数字,并在小数点右边缩放两个位置,如ex(99.43).
我不知道我在这里缺少什么,但我会感谢你诚实的意见和反馈.
多谢你们!!
一个定义DECIMAL在SQL Server列定义为:
DECIMAL(precision, scale)
Run Code Online (Sandbox Code Playgroud)
where precision表示总位数,以及scale小数点后的位数.
所以decimal(2,2)意味着:总共 2位数,其中小数点后 2位.
有了这个声明,您可以从基本上只存储值.00到.99该列中.这真的是你想要/需要的吗?
在MSDN上阅读有关SQL Server中十进制和数字类型的所有详细信息.....
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |