Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengambil ID yang terakhir dimasukkan menggunakan scope_Identity()

Anda tidak boleh membagi kueri menjadi dua kueri. Anda harus memilih/mengatur hasilnya dalam kueri penyisipan.

Saya membuat contoh untuk Anda:

Metode pertama mengembalikan nilai tunggal dengan menggunakan select

private void Method1()
{
    string sEmail = "[email protected]";
    string passwordHash = "#[email protected]#[email protected]!#@[email protected]#!#@$!#@$!";
    string salt = "????";
    string sName = "John";

    using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
        try
        {
            sqlConnection.Open();

            string insertStatement = "INSERT INTO [User] "
                                        + "(email, hash, salt, name) "
                                        + "VALUES (@email, @hash, @salt, @name)"

                                        + "SELECT SCOPE_IDENTITY()";

            using (SqlCommand insertCommand = new SqlCommand(insertStatement, sqlConnection))
            {

                insertCommand.Parameters.Add("@email", SqlDbType.VarChar, 50).Value = sEmail;
                insertCommand.Parameters.Add("@hash", SqlDbType.VarChar, 50).Value = passwordHash;
                insertCommand.Parameters.Add("@salt", SqlDbType.VarChar, 50).Value = salt;
                insertCommand.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = sName;


                int userId = Convert.ToInt32(insertCommand.ExecuteScalar());
                Trace.WriteLine("User created with id: " + userId);
            }
        }

        catch (SqlException ex)
        {
            Trace.WriteLine(ex.Message);
            //lblMessage.Text = ex.Message;
        }
}

Metode kedua adalah mendefinisikan parameter keluaran, dengan cara ini Anda dapat mengembalikan beberapa nilai.

private void Method2()
{
    string sEmail = "[email protected]";
    string passwordHash = "#[email protected]#[email protected]!#@[email protected]#!#@$!#@$!";
    string salt = "????";
    string sName = "John";

    using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
        try
        {
            sqlConnection.Open();

            string insertStatement = "INSERT INTO [User] "
                                        + "(email, hash, salt, name) "
                                        + "VALUES (@email, @hash, @salt, @name)"

                                        + "SET @user_id = SCOPE_IDENTITY()";

            using (SqlCommand insertCommand = new SqlCommand(insertStatement, sqlConnection))
            {

                insertCommand.Parameters.Add("@email", SqlDbType.VarChar, 50).Value = sEmail;
                insertCommand.Parameters.Add("@hash", SqlDbType.VarChar, 50).Value = passwordHash;
                insertCommand.Parameters.Add("@salt", SqlDbType.VarChar, 50).Value = salt;
                insertCommand.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = sName;

                insertCommand.Parameters.Add("@user_id", SqlDbType.Int).Direction = ParameterDirection.Output;

                insertCommand.ExecuteNonQuery();

                int userId = Convert.ToInt32(insertCommand.Parameters["@user_id"].Value);
                Trace.WriteLine("User created with id: " + userId);
            }
        }

        catch (SqlException ex)
        {
            Trace.WriteLine(ex.Message);
            //lblMessage.Text = ex.Message;
        }
}

Yang terbaik yang dapat Anda lakukan adalah, jika kuerinya statis, menempatkan kueri ini dalam prosedur tersimpan. Ini akan mempercepat kueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbaiki "SQL Server memblokir akses ke PERNYATAAN 'OpenRowset/OpenDatasource' dari komponen 'Kueri Terdistribusi Ad Hoc"

  2. Pernyataan CASE dalam klausa WHERE di SQL Server 2008

  3. bagaimana cara membuat hubungan kunci asing pada data yang didistribusikan secara fisik?

  4. Cara Memperbaiki "Hanya satu ekspresi yang dapat ditentukan dalam daftar pilih ..." di SQL Server

  5. Apa praktik terbaik penggunaan penanganan kesalahan SQL Server T-SQL?