爲了獲得所描述的,你應該使用下面的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使用相同的存儲量(字節)。與此同時,我將小數位數限制爲三位,因此允許小數點後兩位取整。同時,有足夠的空間可以「添加」等級(如果這應該是有道理的)總計999999.999
謝謝你好,先生,我有點困惑,所以我用nchar作爲它可以存儲數值(顯然也包括文本)。什麼是最好的數據類型,數字?數據類型說數字(18,0)18和零代表什麼?顯然它們可以改變,但是它與可以輸入的最高和最低值有什麼關係? – ceefax12
我建議使用'decimal(9,3)'。這將在逗號前存儲小數點後三位數字和6(9減3)位數字。因此,任何給定等級的最高存儲值可以是'999999.999'。有關更多信息,請參閱以下內容:https://msdn.microsoft.com/en-us/library/ms187746.aspx – Ralph
ahh我看到了,非常感謝您的幫助:) – ceefax12