我正在尝试使用存储过程插入到表中,其中我有两个主键AgencyID
和ModelID
(int
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
不得重复使用,并且必须继续执行序列。
任何帮助?
提前致谢:)