質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

5973閲覧

VB.NET SQLServer 採番

LATE

総合スコア13

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/04/24 07:48

編集2017/04/24 07:51

初心者なので説明不足などあると思いますが、よろしくお願いいたします。
###前提
VB.netを使いSQL serverに接続し住所録を作成しています。
テキストに入力されている値・文字をDBに追加することはできました。
追加ボタンを押したときに自動で採番をするという機能を実装したいです。
システム内で採番する機能を実装したいです。
###実現したいこと

1.SELECT文で最大値を取得してきてその値を変数に入れ採番するようにしたいです。
2.データがないときに最大値を取得できないのでその時の処理の仕方がわからないです。
###該当のソースコード 【一部抜粋】追加ボタンを押したら処理

Dim strSQL2 As String = "" strSQL2 = "SELECT MAX(ID) FROM テーブル名" Dim ID As Integer Dim strSQL As String = "" strSQL = "INSERT INTO テーブル名 VALUES " & _ " ('ID', " & _ " '" & Text名前.Text & "' , '" & Textカナ.Text & "', " & _ " '" & Text郵便.Text & "', '" & Text住所1.Text & "', " & _ " '" & Text住所2.Text & "', '" & Text住所3.Text & "', " & _ " '" & Text住所1カナ.Text & "', '" & Text住所2カナ.Text & "', " & _ " '" & Text住所3カナ.Text & "', " & Text電話番号.Text & ", " & _ " " & TextFAX番号.Text & ", " & _ " '" & Textメールアドレス.Text & "', " & _ " '" & Text誕生日.Text & "', " & _ " '','" & dtToday.ToString() & "', " & _ "'' )" SQLCm.CommandText = strSQL Cn.Open() SQLCm.ExecuteNonQuery() Cn.Close() MsgBox("登録しました。")

###試したこと
INSERT文の中のIDと書かれているところにSELECT文(SELECT MAX(ID) FROM テーブル名)を入れてみると採番はすることができましたが
データがないときにエラーとなってしまいました。
後、採番ができても順番がバラバラになってしまいORDER BYも入力したらエラーになります。

###補足情報(言語/FW/ツール等のバージョンなど)
言語 VB.NET
ツール Visual Studio 2010
SQLServer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

MAX()で該当レコードなしの場合はNULLを返しますが、ISNULL(フィールド名,代替値)で0か何かに変換してしまえば良いのでは。

投稿2017/04/24 09:20

cauliflowerjoe

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LATE

2017/04/25 04:11

回答ありがとうごさいます いろいろと試してみます
guest

0

ベストアンサー

ID列にIDENTITYプロパティを設定することをお勧めします。
公式
https://msdn.microsoft.com/ja-jp/library/ms186775.aspx
参考
http://backyard.hatenablog.com/entry/20131014/1381731989

投稿2017/04/24 07:59

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LATE

2017/04/24 08:43

回答ありがとうございます IDENTITYプロパティを使用しないで採番する方法ってあるのでしょうか?
ttyp03

2017/04/24 09:44

cauliflowerjoeさんの回答にあるように、取得できない場合はNullになると思うので、Nullなら1(初期値)、Nullでない場合は取得値+1にすれば良いと思います。 という煩わしい処理から解放するために、IDENTITYプロパティをおすすめしました。
LATE

2017/04/25 04:10

回答ありがとうございました いろいろと調べてみますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問