[英]Auto increment a non-primary key (SQL Server 2014) in C#
private void btnOk_Click(object sender, EventArgs e)
{
Helper.openConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = Helper.cn;
cmd.CommandText = "insert into Characters values(@Name, 'Novice', 1, 40, 10, 0, @STR, @AGI, @VIT, @DEX, @LUK, @INT, 1, 1)";
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@STR", txtStr.Text);
cmd.Parameters.AddWithValue("@AGI", txtAgi.Text);
cmd.Parameters.AddWithValue("@VIT", txtVit.Text);
cmd.Parameters.AddWithValue("@DEX", txtDex.Text);
cmd.Parameters.AddWithValue("@LUK", txtLuk.Text);
cmd.Parameters.AddWithValue("@INT", txtInt.Text);
cmd.ExecuteNonQuery();
Helper.cn.Close();
MessageBox.Show("Character successfully created!");
this.Close();
}
上面寫的是我為C#項目中的簡單字符創建屏幕編寫的代碼。 我有一個問題,我需要對CharacterSlot
列進行自動遞增,這是一個非主鍵,因為在下圖中, CharacterID
是我的主鍵。
我還選擇了CharacterID
作為主要CharacterID
,因為每個帳戶可以有多個字符。 以下是我的SQL Server數據庫中的圖像。
編輯:每個字符插槽是一個可單擊的圖片框,它會更改寫在字符選擇屏幕上的統計信息的值,問題是,如果CharacterSlot
始終為1,它將僅顯示Helios的統計信息,而不會顯示其他字符創建(最多3個)。
我該如何解決?
這就是Sequence對象的用途。
CREATE SEQUENCE Test.CountBy1
START WITH 1
INCREMENT BY 1 ;
GO
CREATE TABLE Test.TestTable
(CounterColumn int PRIMARY KEY,
Name nvarchar(25) NOT NULL) ;
GO
INSERT Test.TestTable (CounterColumn,Name)
VALUES (NEXT VALUE FOR Test.CountBy1, 'Syed') ;
GO
SELECT * FROM Test.TestTable;
GO
https://msdn.microsoft.com/en-us/library/ff878370.aspx
您還可以在列的DEFAULT
約束中使用NEXT VALUE FOR
。
因此,如果您希望每次使用重新開始計數,則需要執行此操作。 請注意,命令文本如何為要查找的計數聲明其自己的參數。
CREATE Database Test1
GO
Use Test1
GO
CREATE TABLE TestTable
(CounterColumn int IDENTITY PRIMARY KEY,
Name nvarchar(25) NOT NULL,
SlotNumber INT NOT nULL,
UserId INT NOT NULL
)
GO
---- SQL Command Parameters----
Declare @Name nvarchar(25) = 'Tom';
Declare @UserId INT = 1;
----------------------- SQL Command Text------------
Declare @SlotNumber INT;
SELECT @SlotNumber = IsNull(Max(SlotNumber), 0) + 1 FROM TestTable WHERE UserId=@UserId;
INSERT INTO TestTable (Name, SlotNumber, UserId) VALUES (@Name, @SlotNumber, @UserId);
--------Check results -----------
SELECT * FROM TestTable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.