Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

Scope_Identity () का उपयोग करके अंतिम सम्मिलित आईडी प्राप्त करना

आपको क्वेरी को दो प्रश्नों में विभाजित नहीं करना चाहिए। आपको सम्मिलित क्वेरी के भीतर परिणाम का चयन/सेट करना चाहिए।

मैंने आपके लिए एक उदाहरण बनाया है:

पहली विधि 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;
        }
}

दूसरी विधि आउटपुट पैरामीटर को परिभाषित कर रही है, इस तरह आप कई मान वापस कर सकते हैं।

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

सबसे अच्छा आप यह कर सकते हैं, यदि प्रश्न स्थिर हैं, तो इन प्रश्नों को संग्रहीत प्रक्रियाओं में डाल दें। यह प्रश्नों को गति देगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दिनांक स्वरूप mm/dd/yyyy hh:mm:ss AM/PM . के रूप में लौटाया गया

  2. SQL सर्वर में UNIX_TIMESTAMP

  3. SQL सर्वर में परिणाम सेट की स्कीमा प्राप्त करने के 3 तरीके

  4. डेटाबेस परिवर्तन के बारे में अधिसूचना

  5. SQL सर्वर के लिए Intel Optane संग्रहण का उपयोग करना