使用 Microsoft SQL Server:有多個系統,每個系統都有一組錯誤(四位數字)映射到錯誤組(字串)。有一個例外:如果錯誤字串不在下面的串列中,它應該屬于預定義的錯誤組。
例子:
System 1:
Error Group 1: 2001, 2003, 6538, 6540, 6542, 6544, 6546
Error Group 2: 2002, 6539, 6541, 6543, 6545, 6547, 6549
Error Group 3: 1000, 1001, 1002, 4001, 4007, 5001, 5002 AND ANYTHING ELSE!
System 2:
Error Group 1: 6016, 6533, 6540, 6542, 6544, 6546
Error Group 2: 6541, 6543, 6545, 6547, 6549 AND ANYTHING ELSE!
Error Group 3: 1002, 4001, 4007, 5001, 5002
桌子:
SystemId (int): 1, 2, etc
ErrorGroup (string): "Error Type 1", ...
Error (int?): the four digit number
查找 errorGroup 很簡單:
SELECT ErrorGroup
FROM table
WHERE SystemId = 1 AND Error = 2002
目標是一個查詢,當找到錯誤時將回傳錯誤組,當未找到錯誤時回傳“默認”錯誤組。可以靈活地更改或修改資料以實作這一點。
在 Linq 中會是什么樣子?
uj5u.com熱心網友回復:
如果查詢結果為空,您可以使用 T-SQL ISNULL 系統函式回傳預定義的常量值。
SELECT ISNULL(
(SELECT ErrorGroup FROM table
WHERE SystemId = 1 AND Error = 2002),
'Default Group')
除了字串文字,還可以使用另一個查詢。
至于Linq,DefaultIfEmpty可以用來設定查詢沒有結果的默認值。
uj5u.com熱心網友回復:
如果您知道您將始終只回傳一行,那么最好的方法是使用 coalesce ——這將適用于 SQL 的所有版本和平臺。
SELECT COALESCE(ErrorGroup,'Default Group') AS ErrorGroup
FROM tablename
WHERE SystemId = 1 and Error = 2002
uj5u.com熱心網友回復:
就 SQL 解決方案而言,這是一種可能性。
我將表格創建為:
CREATE TABLE ErrorData (SystemID int NOT NULL,
ErrorGroupID int NOT NULL,
ErrorCode int NULL)
我根據您上面的資訊添加了資料:
INSERT INTO ErrorData (SystemID, ErrorGroupID, ErrorCode)
values (1,1,3001),(1,1,3003),(1,1,6538),(1,1,6540),(1,1,6542),(1,1,6544),(1,1,6546),
(1,2,2002),(1,2,6539),(1,2,6541),(1,2,6543),(1,2,6545),(1,2,6547),(1,2,6549),
(1,3,1000),(1,3,1001),(1,3,1002),(1,3,4007),(1,3,6542),(1,3,5001),(1,3,5002),
(1,3,null),
(2,1,6016),(2,1,6533),(2,1,6540),(2,1,6542),(2,1,6544),(2,1,6546),
(2,2,6541),(2,2,6543),(2,2,6545),(2,2,6547),(2,2,6549),
(2,3,1002),(2,3,4001),(2,3,4007),(2,3,5001),(2,3,5002),
(2,2,null)
您會注意到我為錯誤代碼插入了一個帶有 NULL 的值,以識別默認的錯誤組
然后我可以查詢資料并獲取正確的 ErrorGroup,或使用此查詢的默認值
SELECT TOP 1 ErrorGroupID FROM ErrorData WHERE SystemID = 1 AND (ErrorCode = 3003 OR ErrorCode IS NULL) ORDER BY ISNULL(ErrorCode,99999)
如果我查詢不存在的錯誤代碼,我將獲得默認的錯誤組
SELECT TOP 1 ErrorGroupID FROM ErrorData WHERE SystemID = 1 AND (ErrorCode = 9999 OR ErrorCode ISNULL) ORDER BY ISNULL(ErrorCode,99999)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/467823.html
