アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。
OS:Windows XP
SQL Server2005 ExpressEditionです。

テーブル名:testTable
列 :(1)number(intで主キーで自動採番)(2)name(nvarchar(50))

ストアドプロシージャを以下のSQL文で作成しました。
insert into testTable (name) values('');
update testTable set name = ltrim(str(SCOPE_IDENTITY())) + '_table' where number=SCOPE_IDENTITY();
(説明)
インサート文;(セミコロンを打っています)
アップデート文;(セミコロンを打っています)


なぜこんなことをするかと言いますと、
自動採番で取得した番号を列:nameの内容の一部にしたいためです。
つまり、列:numberが12で採番されたとすると列:nameは 12_table と
したいためです。
ltrimをかけていますのは、str(SCOPE_IDENTITY())の結果、数値の左
に空白が入ってしまうためです。(intのバイト数ほどでしょうか)
想定どおりの値がnameに入っております。
しかしこれは邪道ではないかと危惧しております。
よろしくご教授をお願いいたします。

A 回答 (1件)

str関数は固定長で右揃えした文字列を出力する関数っぽいですね。


http://technet.microsoft.com/ja-jp/library/ms174 …
整数を文字列に変換するなら、素直に
cast(XX as varchar)の方がTrimもいらない様だし安心かと。

あと、"_table"の部分がテーブル単位で固定であるなら
ストアド内で書きこむのではなく、トリガーとか、計算列とか、
場合によってはビューの使用も考慮していいんじゃないかという気がします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
CAST()というのを知りませんでした。
おっしゃるとおりTrimをかけたりするのはスマートではないと考えていました。
またトリガの使用も考慮してみます。
あれから調べてみましたが、
ひとつのSQL文を、BEGIN~ENDでくくりこれをトランザクションの中で実行してみようかと考えていました。
またよろしくお願いいたします。

お礼日時:2011/01/19 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す