2011-06-17 19 views
0

我在SQL Server中得到一個列的最高值在存儲過程中SQLServer的

IF OBJECT_ID ('kii.p_CreateSection') IS NOT NULL 
    DROP PROCEDURE kii.p_CreateSection 
GO 

CREATE PROCEDURE kii.p_CreateSection 
    @Name AS NVARCHAR(200), 
    @DocumentId AS INT, 
    @TypeId AS INT = NULL, 
    @ReportId AS INT = NULL, 
    @OrdinalPosition AS SMALLINT 
AS 
    INSERT INTO kii.Section (Name, DocumentId, TypeId, ReportId, OrdinalPosition) 
    VALUES (@Name, @DocumentId, @TypeId, @ReportId, @OrdinalPosition) 

    SELECT SCOPE_IDENTITY(); 
GO 

GRANT EXECUTE on kii.p_CreateSection TO p_role_kii 
GO 

Section有關Document以下存儲過程。每個文檔都有幾個部分,它們按OrdinalPosistion的值排序。

我想測試一下,如果@OrdinalPosition的給定值爲0,則將其設置爲此文檔+1中所有部分的最大值。

回答

1
Insert kii.Section(Name, DocumentId, TypeId, ReportId, OrdinalPosition) 
Select @Name, @DocumentId, @TypeId, @ReportId 
    , Case 
     When @OrdinalPosition <> 0 Then @OrdinalPosition 
     Else (
       Select Max(OrdinalPosition) + 1 
       From kii.Section 
       Where DocumentId = @DocumentId 
       ) 
     End 
+0

我想以後從行,你需要添加'WHERE DocumentID = @ DocumentID' – therealmitchconnors

+0

@therealmitchconnors - Doah。謝謝。 – Thomas

+0

當表格中沒有任何部分時會失敗。使用此Coalesce(Max(OrdinalPosition)+1,1)來獲取OrdinalPosition的值 – Omar

相關問題