2013-07-01 30 views
1

比方說,我有一個值T-SQL:創建列順序相對於另一列

StudentNumber  StudentName  Class 
--------------------------------------------- 
     0    'A'    100    
     1    'B'    100    
     0    'C'    200    
     1    'D'    200    
     2    'E'    200      

我要聲明StudentNumber作爲序列相對於類數如下表。

,這樣,如果我插入StudentName='F'

  • 類100將分配給它一個2
  • 類200將分配給它一個3
  • 類300將它分配一個0

如果使用索引是不可能的。是否可以在插入命令中「按類選擇最大值」。

(我更願意做一個簡單的命令,以避免死鎖等)

回答

1

這對我的作品(SQL Server 2005中)。如果首先設置變量的這種方法不能滿足您的需求,那麼您可能需要考慮將其作爲插入觸發器並插入名稱和類值。數據庫然後可以提供studentNumber值。

CREATE TABLE t_sw (
studentNumber INT, 
studentName VARCHAR(MAX), 
class INT 
) 
GO 


DECLARE @name VARCHAR(MAX) 
DECLARE @class INT 

SET @name = 'F' 
SET @class = 300 

INSERT INTO t_sw (studentNumber, studentName, class) 
SELECT COALESCE(MAX(studentNumber) + 1, 0), @name, @class 
FROM t_sw 
WHERE class = @class 

SELECT * FROM t_sw 
+1

這些*手卷的MAX()+ 1 *方法工作得很好 - 如果您只是在單用戶環境中進行測試。在負載下,在真實的服務器上,這些方法**傾向於失敗,並且通常會比以後更快產生重複副本。 –

+0

不錯。有沒有辦法與EF一起使用? – Jeb

+0

對不起@rails我不知道EF足夠好評論。您可能會發現基於觸發器的方法會更好。 –