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

ExecuteScalar vs ExecuteNonQuery podczas zwracania wartości tożsamości

Jak zasugerował Aaron, procedura składowana przyspieszyłaby to, ponieważ oszczędza Sql Server pracy związanej z kompilacją Twojej partii SQL. Jednak nadal możesz skorzystać z dowolnego podejścia:ExecuteScalar lub ExecuteNonQuery . IMHO, różnica w wydajności między nimi jest tak mała, że ​​obie metody są równie „właściwe”.

Powiedziawszy to, nie widzę sensu używania ExecuteScalar jeśli pobierasz wartość tożsamości z parametru wyjściowego. W takim przypadku wartość zwracana przez ExecuteScalar staje się bezużyteczny.

Podejście, które lubię, ponieważ wymaga mniej kodu, wykorzystuje ExecuteScalar bez parametrów wyjściowych:

public static int SaveTest(Test newTest)
{
    var conn = DbConnect.Connection();
    const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
                             "               VALUES ( @tester , @premise ) " +
                             "SELECT SCOPE_IDENTITY()";
    using (conn)
    {
        using (var cmd = new SqlCommand(sqlString, conn))
        {
            cmd.Parameters.AddWithValue("@tester", newTest.tester);
            cmd.Parameters.AddWithValue("@premise", newTest.premise);

            cmd.CommandType = CommandType.Text;
            conn.Open();
            return (int) (decimal) cmd.ExecuteScalar();

        }
    }
}

Miłego programowania!

EDYTUJ :Zauważ, że musimy rzutować dwukrotnie:z obiektu na decimal , a następnie do int (dzięki techturtle za odnotowanie tego).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zdobyć skrypt danych SQL Server?

  2. Czy powinienem indeksować pole bitowe w SQL Server?

  3. Jak głęboko skopiować zestaw danych i zmienić odniesienia FK, aby wskazywały na wszystkie kopie?

  4. Aktualizacja SQL z jednej tabeli do drugiej na podstawie dopasowania ID

  5. Najlepsze odpowiedzi na 5 palących pytań dotyczących funkcji COALESCE w SQL Server