sql >> Databáze >  >> RDS >> Sqlserver

Vytvořit uloženou proceduru pro přidání s automatickým přírůstkem jako primárním polem?

V ideálním případě byste jednoduše udělali z TagID pole identity změnou definice tabulky. Pokud to nemůžete udělat, další nejlepší by bylo:

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

Transakce zajistí, že neskončíte s jedinečnými TagID a sloučení zvládne speciální případ, kdy je tabulka prázdná a dává počáteční hodnotu 1.

UPRAVIT:

Na základě změny vaší původní otázky již tabulka obsahuje sloupec identity, takže vaše uložená procedura by měla být:

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

a váš kód C# by měl být

int TagID =int.Parse(txtTagID.Text); //To by mělo spadnout, takže 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. Windows IIS - PHP PDO Mysql Nelze najít ovladač

  2. Jak ignorovat SequelizeUniqueConstraintError v Sequelize?

  3. Vysvětlení rámce MySQL High Availability Framework – Část III:Scénáře selhání

  4. java.sql.SQLException:Přístup odepřen uživateli 'root'@'localhost' (pomocí hesla:ANO)