Date: Thu, 23 Mar 2006 04:04:12 +0900
From: "Tadashi Nakamura" <who@example.com>
太田様、自作の Procedure のご紹介ありがとうございます。
質問を投稿した後で、自分で考えてみて
ほぼ同時刻に 100 件程度の Insert 文が集中した
ときのことを想像すれば、ID を自分でふる、という
Job は簡単に考えると非常にやばいことになる、という
ことが想像されました。
つまり、自分で ID をふる、際には太田様が用意
されたような、それなりに丁寧な Script が必要
なんだろうと思います。
割り当てられた ID を直後に取得する、ために
SQL 文に1個か2個か、Key Word を使えばできれば
いいのですが、そうは行かないようです。
Insert 文の直後に Select 文によって割り振られた ID を
取得する、という方法が、スマートとは言えませんが
ベストかな、と現時点では考えております。
ありがとうございました。
----- Original Message -----
From: "Kohichiroh Ohta" <who@example.co.jp>
To: <who@example.ne.jp>
Sent: Wednesday, March 22, 2006 9:52 AM
Subject: [ml-msde-beg:01808] RE: ID がいくつにセットされるのか知りたい
> いつもお世話になっております。太田です。
>
> Nakamuraさんへ
>
> 私がそういう場面で使う手法を紹介します。
> もしかしたらよくない方法かもしれません。
> その場合はご指摘ください。
>
>
> まず、IDですが今はACCESSで言うところの
> オートナンバー型にされていると思います。
> それを varchar(50) に変えてください。
>
> 次に以下のようなストアドプロシージャを作成します。
>
> --------------------------------------------------
> ALTER PROCEDURE myNewID
> AS
>
> -- uniqueidentifier 型の変数を宣言
> DECLARE @ID uniqueidentifier
>
> -- uniqueidentifier 型の一意な値を得る
> SET @ID = NEWID()
>
> -- varchar型へ変換して出力
> SELECT CAST( @ID AS varchar(50) ) AS NewID
>
> RETURN
> --------------------------------------------------
>
> NEWID関数はGUIDを返す関数です。
> 実行するだびに二度と重複しない値を返してくれます。
> myNEWIDは、NEWID関数で得たGUID値を文字列型に変換しています。
>
>
> 私の場合インターフェイスアプリケーションはACCESSで開発しますので
> ここからはACCESSの話をします。
> ACCESSのモジュールに以下のような関数を作ります。
>
> --------------------------------------------------
> Public Function myNewID() As String
>
> Dim cmd As New ADODB.Command
> Dim RS As New ADODB.Recordset
>
> ' コマンドにストアドプロシージャをセットする
> Set cmd.ActiveConnection = conn
> cmd.CommandText = "dbo.myNewID"
> cmd.CommandType = adCmdStoredProc
>
> ' コマンドを実行しレコードセットに取り込む
> Set RS = cmd.Execute
>
> ' NewIDを返す
> myNewID = RS!NewID
>
> RS.Close
>
> Set RS = Nothing
> Set cmd = Nothing
>
> End Function
> --------------------------------------------------
>
> この関数を実行して、得た値をフォーム上の
> フィールドか何かに保存しておきます。
> レコードの挿入時にはその値を書き込みます。
> つまり事前にIDの値を自分で用意して
> それをレコードにも書き込むという手法です。
>
> ちなみにイミディエイトウィンドウにて
> ?myNewID
> と入力すると
> 4BCF806F-0A36-4CEE-8A96-750620DADD7B
> などという値が返ってきます。
> これは完全にユニークな値で、世界中のコンピュータで
> 同時に実行しても、あるいは何度実行しても
> 同じ値は出ない。
> らしいです。
>
> これを私なりに利用した方法なのですが
> あまり自信はありません。
>
>
>
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|