sql >> データベース >  >> RDS >> Sqlserver

自動インクリメントをプライマリ フィールドとして追加するストアド プロシージャを作成しますか?

    理想的には、テーブル定義を変更して TagID を ID フィールドにするだけです。それができない場合、次善の策は次のとおりです。

    CREATE PROCEDURE [dbo].[InsertTagProcdure] @Value nvarchar(200), @TagCount nvarchar(200) ASBEGIN 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  

    トランザクションは、一意の TagID で終わらないことを保証し、合体は、テーブルが空で初期値 1 を与える特殊なケースを処理します。

    編集:

    元の質問への変更に基づいて、テーブルには既に ID 列があるため、ストアド プロシージャは次のようになります。

    CREATE PROCEDURE [dbo].[InsertTagProcdure] @Value nvarchar(200), @TagCount nvarchar(200) ASBEGIN 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", 値); cmd.Parameters.AddWithValue("@TagCount", TagCount); cmd.ExecuteNonQuery(); }  

    1. PostgreSQLの日付に序数標識を追加する

    2. OracleのSQLクエリで固定数の行をフェッチします

    3. MySQLユニオンクエリの重複行

    4. テーブル名が可変であるMySQLから選択する方法