sql >> Database >  >> RDS >> Sqlserver

Opgeslagen procedure maken om toe te voegen met automatische verhoging als primair veld?

Idealiter zou je TagID gewoon een identiteitsveld maken door de tabeldefinitie te wijzigen. Als je dat niet kunt, is het volgende beste:

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

De transactie zorgt ervoor dat u geen unieke TagID's krijgt en de coalesce handelt het speciale geval af waarbij de tabel leeg is en een initiële waarde van 1 geeft.

BEWERKEN:

Op basis van de wijziging in uw oorspronkelijke vraag heeft de tabel al een identiteitskolom, dus uw opgeslagen procedure zou moeten zijn:

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

en uw C#-code zou moeten zijn

int TagID =int.Parse(txtTagID.Text); //Dit zou moeten wegvallen, dus 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. Hoe kan ik een kopie van een Oracle-tabel maken zonder de gegevens te kopiëren?

  2. spreidingsplot in jfreechart uit database

  3. CAST() versus TRY_CAST() in SQL Server:wat is het verschil?

  4. Hoe schrijf je deze SQL-instructie?