Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer une procédure stockée à ajouter avec l'incrémentation automatique comme champ principal ?

Idéalement, vous feriez simplement de TagID un champ d'identité en modifiant la définition de la table. Si vous ne pouvez pas le faire, le mieux serait :

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

La transaction garantit que vous ne vous retrouvez pas avec des TagID uniques et la fusion gère le cas particulier où la table est vide et donne une valeur initiale de 1.

MODIF :

En fonction de la modification apportée à votre question d'origine, la table comporte déjà une colonne d'identité. Votre procédure stockée doit donc être :

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

et votre code C# devrait être

int TagID =int.Parse(txtTagID.Text); //Ceci devrait disparaître, donc incrémentation automatique.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();
            }