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

Creare una procedura memorizzata da aggiungere con l'incremento automatico come campo principale?

Idealmente, dovresti semplicemente rendere TagID un campo di identità modificando la definizione della tabella. Se non puoi farlo, il prossimo migliore sarebbe:

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 transazione assicura che non ti ritrovi con TagID univoci e il coalesce gestisce il caso speciale in cui la tabella è vuota e fornisce un valore iniziale di 1.

MODIFICA:

In base alla modifica alla tua domanda originale, la tabella ha già una colonna di identità, quindi la tua procedura memorizzata dovrebbe essere:

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

e il tuo codice C# dovrebbe essere

int TagID =int.Parse(txtTagID.Text); //Questo dovrebbe scomparire quindi 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();
            }