Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criar procedimento armazenado para adicionar com incremento automático como seu campo principal?


Idealmente, você apenas tornaria TagID um campo de identidade alterando a definição da tabela. Se você não pode fazer isso, o próximo melhor seria:
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

A transação garante que você não acabe com TagIDs exclusivos e o coalesce trata o caso especial em que a tabela está vazia e fornece um valor inicial de 1.

EDITAR:

Com base na alteração da sua pergunta original, a tabela já possui uma coluna de identidade, portanto, seu procedimento armazenado deve ser:
CREATE PROCEDURE [dbo].[InsertTagProcdure]
       @Value nvarchar(200), 
       @TagCount nvarchar(200) 
AS
BEGIN
    INSERT INTO Tag (Value,TagCount) VALUES (@Value,@TagCount)
END

e seu código C# deve ser

int TagID =int.Parse(txtTagID.Text); //Isto deve cair então 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();
            }