MSDE FunClub
Microsoft Data Engine FunClub
MSDE初心者向けメーリングリスト過去ログ[1809]番
 
[TOP]>[MSDE初心者向けメーリングリスト過去ログ(1809番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: ID がいくつにセットされるのか知りたい

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 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。