2009-02-22 11 views
7

タイトルの内容は何ですか。 SELECT @@IDENTITY AS ins_idなどのクエリでは、テーブル名やその他の情報を指定して、どのテーブル/データベースを指定する必要がありますか?PHPでMSSQLにIDを挿入するには?

答えて

14

@@IDENTITYは、現在のセッションで生成された最新の識別情報を返します。ほとんどの場合、おそらくSCOPE_IDENTITYを代わりに使用して、現在のスコープで生成された最新のIDを返します。例えば

、あなたがTABLE1に行を挿入する場合、それインサートは表2に行を挿入トリガーを起動SCOPE_IDENTITYからアイデンティティが返されるのに対し、次いで@@IDENTITY表2からアイデンティティが返されテーブル1

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

私も見てきました:SELECT CAST(intとしてCOALESCE(SCOPE_IDENTITY()、@@ IDENTITY)) – jjwdesign

+0

ダウンが投票しました。私はどんなPHPを見ていない、質問は "PHPでMSSQLの挿入IDを取得する方法"でした。 –

1

いいえ; mysqlのSELECT LAST_INSERT_ID()と同じように動作し、最後に挿入されたID値を取得します。あなたがそれについて心配しておきたいことがあるかもしれない詳細については、this in-depth examinationをご覧ください。

1

ここには、Joomlaコードに基づくコードスニペットがあります。 $ dbhはデータベース接続(mssql_connect()の結果)です。 $ keyName引数を渡すと、キー名(ID)が更新されます。

このコードでは、挿入された値のID(または必要な値)を取得するために、MSSQLキーワード "OUTPUT"を使用しています。

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

私はSCOPE_IDENTITYでGUID(pk)を取得することができないので、私はこのソリューションが好きです。しかし、mssql_resultとOUTPUT INSERTEDを組み合わせて使用​​すると、pkの自動インクリメント整数またはユニークですGUIDのような発言。 – greaterKing

関連する問題