我想在数据库中的一个表中创建一个计算字段。我正在使用visual basic
,我的IDE是visual studio。
我最近使用访问创建了相同的数据库,并在计算字段的表达式中使用了以下计算:
(([Grade1]/10)*2)+(([Grade2]/10)*3)+(([Grade3]/10)*5)
首先,我只是将代码粘贴到默认值或字段绑定中作为远景,但是出现了错误。猜猜我不允许使用现有列中的数据进行计算。
有人可以帮我创建这个领域吗?该字段不需要在数据库中,但是如果可以使用datagridview
或类似的东西在数据库外部计算它,那么这将是正常的。
1年级,2年级和3年级包含0到100之间的数字。
除非有人能指出我正确的方向,否则我找不到任何教程?
答案 0 :(得分:1)
为了获得所描述的计算字段,您应该使用以下T-SQL代码:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 nchar(3) not null,
Grade2 nchar(3) not null,
Grade3 nchar(3) not null,
Overall as cast(((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5)) as nchar(10))
)
然而,我不明白为什么要将成绩存储为文本。此外,您的T-SQL代码需要将文本隐式转换为数字,进行计算,然后再将其还原为文本。此外,在转换过程中,您不会告诉SQL转换为什么。因此,如果您有小数位的成绩,那么表中的SELECT
将会失败。
insert into dbo.Enrolement
(
StudentID,
ModuleNUmber,
Grade1,
Grade2,
Grade3
)
values (
2, -- StudentID - int
101, -- ModuleNUmber - int
N'1.2', -- Grade1 - nchar(3)
N'1.8', -- Grade2 - nchar(3)
N'3.9' -- Grade3 - nchar(3)
)
select *
from dbo.Enrolement
消息245,级别16,状态1,行17转换时转换失败 nvarchar值' 1.2'数据类型int。
所以,我非常建议您使用数字来存储您的成绩,如果他们之后要用于计算。这是与数字相同的表格:
create table dbo.Enrolement
(
StudentID int not null,
ModuleNUmber int not null,
Grade1 decimal(9, 3) not null,
Grade2 decimal(9, 3) not null,
Grade3 decimal(9, 3) not null,
Overall as ((Grade1 / 10 * 2) + (Grade2 / 10 * 3) + (Grade3 / 10 * 5))
)
我选择使用decimal(9,3)
,因为从1到9的任何精度都使用相同的存储量(以字节为单位)。同时我将小数位数限制为3,从而允许在小数点后两位进行舍入。与此同时,还有足够的空间来增加"添加"成绩(如果这应该有意义)到总计999999.999