Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine gespeicherte Prozedur zum Hinzufügen mit automatischem Inkrement als primärem Feld?

Idealerweise würden Sie TagID einfach zu einem Identitätsfeld machen, indem Sie die Tabellendefinition ändern. Wenn Sie das nicht können, wäre das Nächstbeste:

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

Die Transaktion stellt sicher, dass Sie nicht mit eindeutigen TagIDs enden, und die Koaleszenz behandelt den Sonderfall, in dem die Tabelle leer ist und einen Anfangswert von 1 ergibt.

BEARBEITEN:

Basierend auf der Änderung Ihrer ursprünglichen Frage enthält die Tabelle bereits eine Identitätsspalte, sodass Ihre gespeicherte Prozedur folgendermaßen aussehen sollte:

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

und Ihr C#-Code sollte

sein

int TagID =int.Parse(txtTagID.Text); //Dies sollte wegfallen, also 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();
            }