Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pobieranie ostatniego wstawionego identyfikatora za pomocą scope_Identity()

Nie należy dzielić zapytania na dwa zapytania. Powinieneś wybrać/ustawić wynik w zapytaniu wstawiania.

Zrobiłem dla Ciebie przykład:

Pierwsza metoda to zwrócenie pojedynczej wartości za pomocą 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;
        }
}

Drugą metodą jest zdefiniowanie parametru wyjściowego, w ten sposób możesz zwrócić wiele wartości.

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;
        }
}

Najlepsze, co możesz zrobić, to umieszczenie tych zapytań w procedurach składowanych, jeśli zapytania są statyczne. Przyspieszy to zapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z projektem procedury składowanej RESTful webservice + JSON + SQL

  2. Jak utworzyć datę w SQL Server, biorąc pod uwagę dzień, miesiąc i rok jako liczby całkowite?

  3. Jak zmusić zapytanie, aby nie używało indeksu w danej tabeli?

  4. Jak zaokrąglać (GÓRA/DÓŁ) w SQL Server – 5 przydatnych wskazówek

  5. Suma jednej grupy kolumn według kolumny daty