- - PR -
UniqueIdentifier型の列に自動採番されたIDをSCOPE_IDENTITYで取得できない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-11-06 14:27
こんにちは
以下の疑問にご回答頂ければ幸いです。 主キーにUniqueIdentifier型列を持ち、 既定値に「newid()」を設定しているあるテーブルに対して ASP.NETより、採番された値を取得する為に「SCOPE_IDENTITY()」を 用いようとしていますが、値がうまく取れません。(NULLが帰ってくる) UniqueIdentifier型ではなく、int型でIDENTITYによる自動採番号にすれば 問題なく値が取れる事は確認済みです。 また、テーブルに手で直接レコードを作成した際に主キーが自動採番号されている ことも確認済みです。 なぜ、前者の場合、値がNULLになってしまうのでしょうか? 受け取り側(ASP.NETのコード)の書き方の問題でしょうか? #.netの問題ではなく、DB側の問題/仕様の様な気もします。 #話題が大きくそれそうならご指摘ください。 以下、サンプルコード '−−−−−−−−−−−−−−−−−−−−−−−−−− 'テーブル名:hoge/列:RecID(主キー)、AAA Dim sNewID as string = "NONE" Dim objCon As SqlConnection = New SqlConnection("(接続文字列)") Try objCon.Open() Dim sSQL as string = "insert into hoge (A)values(@inpVal);" _ & "SELECT @GetID = SCOPE_IDENTITY();" objCmd = New SqlCommand(sSQL, objCon) objCmd.Parameters.AddWithValue("@inpVal", "テスト") Dim objRetParam As SqlParameter = _ objCmd.Parameters.AddWithValue("@GetID", SqlDbType.UniqueIdentifier) objRetOutParam.Direction = ParameterDirection.Output sNewTicketID = "" objCmd.ExecuteNonQuery() 'INSERT & SELECT EXECUTE sNewID = CType(objRetOutParam.Value, String) objCmd.Dispose() Finally objCon.Close() End Try ※「@GetID」の値が、NULLなので、CTYPEのところで落ちます。 値がNULLであることは、ウォッチで確認しました。 以上、宜しくお願いします。 |
|
投稿日時: 2008-11-06 15:44
その後の追記です。
差し当たり・・・・ (1)”UniqueIdentifier型はMUST要件ではない”ので IDENTITYのint型を主キーとする方法 (2)ASP.NET側で、NewGuideによりキーを発行して これをインサートする方法(要重複チェック) のどちらかを天秤にかけることにしました。 疑問は残ったままですが。。。。有難うございました。 |
1