sql >> Database teknologi >  >> RDS >> Sqlserver

Vil du oprette en lagret procedure, der skal tilføjes med automatisk stigning som primært felt?

Ideelt set ville du bare gøre TagID til et identitetsfelt ved at ændre tabeldefinitionen. Hvis du ikke kan gøre det, ville det næstbedste være:

CREATE PROCEDURE [dbo].[InsertTagProcdure]
       @Value nvarchar(200), 
       @TagCount nvarchar(200) 
AS
BEGIN
    BEGIN TRANSACTION
        DECLARE @TagID int;
        SELECT @TagID = coalesce((select max(TagID) + 1 from Tag), 1)
    COMMIT      
    INSERT INTO 
        Tag 
        (TagID,Value,TagCount) 
        VALUES 
        (@TagID,@Value,@TagCount)
END

Transaktionen sikrer, at du ikke ender med unikke TagID'er, og sammensmeltningen håndterer det særlige tilfælde, hvor bordet er tomt og giver en startværdi på 1.

EDIT:

Baseret på ændringen af ​​dit oprindelige spørgsmål har tabellen allerede en identitetskolonne, så din lagrede procedure bør være:

CREATE PROCEDURE [dbo].[InsertTagProcdure]
       @Value nvarchar(200), 
       @TagCount nvarchar(200) 
AS
BEGIN
    INSERT INTO Tag (Value,TagCount) VALUES (@Value,@TagCount)
END

og din C#-kode skal være

int TagID =int.Parse(txtTagID.Text); //Dette skulle falde væk, så auto increment.String Value =txtValue.Text;int TagCount =int.Parse(txtCount.Text);

        using (var conn = new SqlConnection(Properties.Settings.Default.DBConnectionString))
        using (var cmd = conn.CreateCommand())
        {
                conn.Open();
                cmd.CommandText = "InsertTagProcdure";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Value", Value);
                cmd.Parameters.AddWithValue("@TagCount", TagCount);
                cmd.ExecuteNonQuery();
            }


  1. Fejlkode:1292. Afkortet forkert DOBBELT værdi:'ja'

  2. MySQL - Sådan vælger du Minimum OG Maximum i én (UNION) forespørgsel

  3. Konverter JS datotid til MySQL datotid

  4. Tidszoneområdet blev ikke fundet