Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Създаване на съхранена процедура за добавяне с автоматично нарастване като основно поле?

В идеалния случай просто бихте направили TagID поле за идентичност, като промените дефиницията на таблицата. Ако не можете да направите това, следващият най-добър би бил:

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

Транзакцията гарантира, че няма да се окажете с уникални TagIDs и коалесцията обработва специалния случай, когато таблицата е празна и дава първоначална стойност 1.

РЕДАКТИРАНЕ:

Въз основа на промяната на вашия първоначален въпрос, таблицата вече има колона за идентичност, така че вашата съхранена процедура трябва да бъде:

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

и вашият C# код трябва да бъде

int TagID =int.Parse(txtTagID.Text); //Това трябва да отпадне, така че автоматично се увеличава.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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да направя HTTP заявка от SQL сървър?

  2. Създайте скаларна дефинирана от потребителя функция в SQL Server

  3. Свързване на SQL Server 2008 към Outlook Calendar?

  4. T-SQL XOR оператор

  5. преименуване на временна таблица във физическа