重新设置身份增量SQL Server C#row_number()DENSE_RANK()

时间:2017-11-11 07:32:14

标签: c# sql-server max row-number dense-rank

我正在尝试使用存储过程插入到表中,其中我有两个主键AgencyIDModelIDint auto)。条件是只要AgencyID没有改变,ModelID列将自动递增1。

到目前为止没有任何问题,但我需要在用户更改ModelID后将AgencyID重新设置为1。

像这样:

AgencyID  ModelID
-----------------
 AB        1
 AB        2
 AB        3
 CD        1
 CD        2
 EG        1
 EG        2
 AB        4

这是我的插入存储过程:

ALTER procedure [dbo].[spModel_insert]
     (@AgencyID varchar(10),
      @ModelName varchar(100),
      @Gender bit,
      @Email varchar(100),
      @Address varchar(250),
      @ImageURL varchar(250),
      @ModelID int output)
as
    INSERT INTO ModelsT (AgencyID, ModelName, Gender, Email, [Address], ImageURL)
    VALUES (@AgencyID, @ModelName,  @Gender, @Email, @Address, @ImageURL)

    SET @ModelID = SCOPE_IDENTITY()

我可以通过C#中的扭曲方式解决它,通过使用选择Max Modelid到ExecuteScalar到变量中并在过滤后的SQL中添加1,并在第一个记录中添加dataBindingSource.Count

int x;
x = ModelBindingSource.Count;\\ This code is inside the Add button.

if (x <= 1)
{
    txt_ModelID.Text = x.ToString();   
}
else if (x > 1)
{
    GetModelID(); //This is the max select sql method where other variables 
    //will +1 to set it in the txt_ModelID.Text.
}

但是上述意味着ModelID在存储过程中不需要自动,而需要自动。此外,我并不认为这非常实用,因为我试图将所有逻辑分开,专注于存储过程。

我知道可以通过row_number()dense_rank()完成但不确定如何在插入存储过程中使用它?请注意,如果删除,则ModelID不得重复使用,并且必须继续执行序列。

任何帮助?

提前致谢:)

0 个答案:

没有答案