2009-02-22 26 views

Trả lời

14

@@IDENTITY trả về danh tính mới nhất được tạo trong phiên hiện tại. Trong hầu hết các trường hợp, bạn có thể muốn sử dụng SCOPE_IDENTITY để trả về danh tính mới nhất được tạo trong phạm vi hiện tại.

Ví dụ, nếu bạn chèn một hàng vào table1, nhưng chèn mà bắn một kích hoạt mà chèn một hàng vào table2, sau đó @@IDENTITY sẽ trở lại bản sắc từ table2 trong khi SCOPE_IDENTITY sẽ trở lại bản sắc từ table1.

INSERT INTO my_table (my_column) VALUES ('test') 

-- return the identity of the row you just inserted into my_table 
-- regardless of any other inserts made by triggers etc 
SELECT SCOPE_IDENTITY() AS ins_id 
+0

Tôi cũng thấy: CHỌN CAST (COALESCE (SCOPE_IDENTITY(), @@ IDENTITY) AS int) – jjwdesign

+0

Đã bỏ phiếu. Tôi không thấy bất kỳ php, câu hỏi là "Làm thế nào để có được Chèn id trong MSSQL trong PHP". –

1

Không; nó hoạt động giống như SELECT LAST_INSERT_ID() trong mysql, lấy giá trị nhận dạng cuối cùng được chèn vào. Bạn có thể muốn xem this in-depth examination để biết thêm thông tin về những gì bạn có thể muốn quan tâm.

1

Đây là đoạn mã dựa trên mã Joomla. $ dbh là kết nối cơ sở dữ liệu (kết quả của mssql_connect()). Tên khóa (ID) được cập nhật nếu bạn chuyển đối số $ keyName.

Mã này đang sử dụng từ khóa MSSQL "OUTPUT" để nhận ID (hoặc bất kỳ giá trị bắt buộc nào) của giá trị được chèn.

function mssql_insertObject($table, &$object, $keyName = NULL) 
{ 
    global $dbh; 

    if($keyName) { 
     $fmtsql = 'INSERT INTO '. $table .' (%s) OUTPUT INSERTED.' . $keyName . ' VALUES (%s) '; 
    } 
    else { 
     $fmtsql = 'INSERT INTO '. $table .' (%s) VALUES (%s) '; 
    } 

    $fields = array(); 

    foreach (get_object_vars($object) as $k => $v) { 
     if (is_array($v) or is_object($v) or $v === NULL) { 
      continue; 
     } 

     if ($k[0] == '_') { // internal field 
      continue; 
     } 

     $fields[] = $k; 
     $values[] = "'" . str_replace("'", "''", $v) . "'"; 
    } 

    $sql = sprintf($fmtsql, implode(",", $fields) , implode(",", $values)); 

    $query = mssql_query($sql, $dbh); 

    if($query === false) { 
     return false; 
    } 

    if(is_resource($query)) 
    { 
     if($keyName) { 
      $id = mssql_result($query, 0, 0); 

      if($id) { 
       $object->$keyName = $id; 
      } 
     } 

     mssql_free_result($query); 
    } 

    return true; 
} 
+0

Tôi thích giải pháp này vì tôi tin rằng nó bao gồm tất cả các căn cứ của bạn vì bạn không thể có được GUID (pk) với SCOPE_IDENTITY .. nhưng sử dụng mssql_result kết hợp với OUTPUT INSERTED trong câu lệnh sql của bạn làm việc với pk's là số nguyên tăng dần tự động hoặc duy nhất stings như GUIDs. – greaterKing

Các vấn đề liên quan