sql >> Base de Datos >  >> RDS >> Sqlserver

¿Crear procedimiento almacenado para agregar con incremento automático como su campo principal?

Idealmente, solo haría TagID un campo de identidad cambiando la definición de la tabla. Si no puede hacer eso, lo siguiente mejor sería:

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 transacción garantiza que no termine con TagID únicos y coalesce maneja el caso especial en el que la tabla está vacía y da un valor inicial de 1.

EDITAR:

Según el cambio a su pregunta original, la tabla ya tiene una columna de identidad, por lo que su procedimiento almacenado debería ser:

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

y su código C# debería ser

int TagID =int.Parse(txtTagID.Text); //Esto debería desaparecer, por lo que se incrementa automáticamente.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();
            }