簡體   English   中英

在C#中自動遞增非主鍵(SQL Server 2014)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM