sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en lagrad procedur att lägga till med automatisk ökning som primärt fält?

Helst skulle du bara göra TagID till ett identitetsfält genom att ändra tabelldefinitionen. Om du inte kan göra det är näst bäst:

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

Transaktionen säkerställer att du inte får unika TagID:n och sammansmältningen hanterar specialfallet där tabellen är tom och ger ett initialt värde på 1.

EDIT:

Baserat på ändringen av din ursprungliga fråga har tabellen redan en identitetskolumn så din lagrade procedur bör vara:

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

och din C#-kod bör vara

int TagID =int.Parse(txtTagID.Text); //Detta bör falla bort så 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. PHP Konvertera datum till tomma dagar/timmar/sekunder sedan

  2. Hur man hittar en användares standardspråk i SQL Server (T-SQL)

  3. Importera MS ACCESS DB till mySql?

  4. Sorteringsproblem, är det möjligt att nedgradera/konvertera från utf8mb4_unicode_ci till utf8_general_ci?