[ASP+SQLserver]追加したてのIDを知りたい

このQ&Aのポイント
  • ASPとSQLサーバーを使用して動的なWebページを作成しています。質問は、SQLサーバーにデータを追加している際に、追加したてのIDを取得する方法についてです。
  • データベースに追加したデータのIDを取得できるかどうかについて質問しています。具体的には、DBへのデータ追加後に直近のIDを取得または利用する方法についての解決策を求めています。
  • ASPとSQLサーバーを使用してWebページを作成している場合に、データベースに追加したデータのIDを取得する方法について質問しています。具体的には、DBへのデータ追加後に直近のIDを取得するためのコマンドや手法について教えてください。
回答を見る
  • ベストアンサー

[ASP+SQLserver]追加したてのIDを知りたい

こんにちわ。 ASPとSQLサーバーで動的なWebページを作成しています。 SQLサーバー内に「sampletable」というデータベースがあるとします。 ID int (1から1づつ増加のオートナンバー) Name varchar というフィールド構成とします。 rsSample.Open "SELECT * FROM sampletable",dbConnection,3,2 rsSample.AddNew  rsSample("Name") = "Hajime Kindaichi" rsSample.Update という流れでDBにデータを追加しているとします(dbConnectionなどは前段にセットしているものとします)。 この場合、IDは自動で連続する番号を採番しているわけですが、rsSample.Updateのあとで直前に追加したてのIDを取得or利用したい場合、なにかコマンドなどを用いて取得することはできますでしょうか? それとも、SessionIDなどを残しておいてクエリを生成しOpenして取得しなければいけないのでしょうか? 以上、宜しくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • laputart
  • ベストアンサー率34% (288/843)
回答No.1

rsSample.Update の後に '最新の番号 rsSample.MoveLast LastNum = rs("ID int") で lastNumという変数に一番新しいID int が 取込み出来ます。

zenon55
質問者

お礼

できました・・・。

関連するQ&A

  • SQLServer2005 メンテナンスプランについて

    SQLServer2005の管理、メンテナンスプランについての質問です。 互換性レベル7.0で運用しているDBのバックアップタスクを作成したいと思っています。 ツールボックスから「データベースのバックアップタスク」を使用すると、対象のDBとしてリストに表示されないため、 「T-SQLの実行タスク」を作成し、ステートメントに以下のように記述しました。バックアップは正常終了するのですが。。。 -------------------クエリここから----------------- BACKUP DATABASE [DB_NAME] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH NOFORMAT, NOINIT, NAME = N'DB_NAME_backup_20090115151905', SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' ) if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND -------------------クエリここまで----------------- ここで、問題なのは、バックアップファイル名の指定が「DB_NAME_backup_200901151519.bak」固定であることです。 実行日時を取得してファイル名を生成するため、以下のように引数の「DISK」と「NAME」を変数で指定するように変更しました。 しかし、クエリの実行をすると、メッセージに以下のエラーが出力され、実行できません。 引数の渡し方が誤っているのでしょうか? 宜しくご教授願います。 -------------------変更後クエリここから----------------- DECLARE @TODAY VARCHAR(30); DECLARE @YYYY VARCHAR(4); DECLARE @MM VARCHAR(2); DECLARE @DD VARCHAR(2); DECLARE @HH VARCHAR(2); DECLARE @M VARCHAR(2); DECLARE @S VARCHAR(2); DECLARE @DISK VARCHAR(200); DECLARE @NAME VARCHAR(100); set @TODAY = convert(varchar, GETDATE(), 121); set @YYYY = SUBSTRING(@TODAY, 1, 4); set @MM = SUBSTRING(@TODAY, 6, 2); set @DD = SUBSTRING(@TODAY, 9, 2); set @HH = SUBSTRING(@TODAY, 12, 2); set @M = SUBSTRING(@TODAY, 15, 2); set @S = SUBSTRING(@TODAY, 18, 2); set @DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M +'.bak'; set @NAME = N'DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M + @S; print 'DISK:'+@DISK print 'NAME:'+@NAME BACKUP DATABASE [DB_NAME] TO DISK = @DISK WITH NOFORMAT, NOINIT, NAME = @NAME, SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' ) if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end RESTORE VERIFYONLY FROM DISK = @DISK WITH FILE = @backupSetId, NOUNLOAD, NOREWIND -------------------変更後クエリここまで----------------- -------------------メッセージここから------------------- DISK:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901211339.bak NAME:DB_NAME_backup_20090121133912 メッセージ 137、レベル 15、状態 2、行 1 スカラ変数 "@DISK" を宣言してください。 メッセージ 137、レベル 15、状態 2、行 4 スカラ変数 "@DISK" を宣言してください。 -------------------メッセージここまで------------------- 以上、よろしくお願い致します。

  • [ASP+SQLsrv]SUMしたのを表示したい・・・

    こんにちわっ☆ ASPとSQLサーバでWebアプリを開発しております。 SQLのSELECT文で式典の参加人数を計算しました。 ・・・SELECT文でSUM計算させたの初めてで・・・。 どうやったら計算結果使えるんですか!? Set rsSUM = Server.CreateObject("ADODB.Recordset")  rsSUM.Open "SELECT SUM(GOcust) FROM D_InvoiceDetail",dbConnection,3,2 としたものを・・・。 Response.Write rsSUM("SUM(GOcust)") ↑とか色々しましたが・・・。 どぉしたら使えますか・・・。 って、ひょっとしてめちゃ恥ずかしいこと聞いてる?? ううぅぅ。

  • SQLServerで列名取得

    Microsoft SQL Server2014 ManagementStudio を Windows7 で使用しています。 テーブルのカラム(列)名を取得したくて いろいろ調べてみましたが SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'TestTable' ORDER BY ORDINAL_POSITION とか、 select name from Sys.Columns where object_id = object_id('TestTable') を実行しても、空のデータしか表示されません。 何がまちがっているのか教えてください。

  • SQLServerのID列(自動連番)について

    PHPとSQL Serverでウェブアプリケーションを作っています。 例として、下記のようなテーブルを想定します。 テーブル名 users  user_id [int] ←主キー(IDENTITYプロパティを指定して、1ずつ増える連番)  name [char(10)] IDENTITYにより、INSERT INTO でuser_idの値を指定せずとも、一意のID値が割り振られます。 このINSERT処理は、PHPのmssql_queryでSQL文を発行しているのですが、 この時割り振られたuser_idが何であるかは、どうやって調べればよいのでしょうか。 IDENTITYを利用せず、INSERTする前にSELECT MAX(user_id)を発行して、 最も大きなuser_idを調べ、それを+1してINSERT、とすれば当然user_idは分かりますが、 せっかくIDENTITYの機能があるのに明らかに無駄な処理です。 どなたか分かる方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • ストアドプロシージャに複数のSQL文を書く

    いつもお世話になります。 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に入っております。 しかしこれは邪道ではないかと危惧しております。 よろしくご教授をお願いいたします。

  • mysqli_insert_idについて

    古いサーバーから新しいサーバーに入れ替え、 PHPが5.1から5.6に変わったため、PHPのファイルを修正しています。 だいたい修正ができたのですが、どうしても「mysql_insert_id」が修正できません。 修正したソースは以下になります。 ******************************** $sql = "INSERT INTO img_k (img_name,img_caption,up_datetime) VALUES('".$in_img."','".$in_img_text."',now())"; mysqli_query(connect(), $sql) or die(mysql_error()."<br>$sql"); $id = mysqli_insert_id(connect()); ********************************* $idにINSERTした最新のIDを取得したいのですが、結果は「0」になります。 IDはmysqlでauto_incrementに設定してます。 connect()は別ファイルでデータベースの接続してます。 これでIDが取得できず先に進めない状態です。 あと「オブジェクト指向型」ではなく「手続き型」でお願いします。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • ASP2.0からSQLserver2000への認証

    開発環境:VisualStudio.net2005 ASP.net DB:SQLServer2000 ログインコントロールで下記のコードを作成したところ 開発環境ではうまくいっているのですが、Webサーバーにリリースしたところうまくいきません。 ------------------------------------------------------------------------------------------------------------- Protected Sub Login1_LoggingIn(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LoginCancelEventArgs) Handles Login1.LoggingIn ' 入力されたユーザーID、パスワードでusrテーブル内のレコードを検索 Dim objDb As New SqlConnection("Data Source=dbserver;Initial Catalog=testdb;Persist Security Info=True;User ID=testusr;PassWord=hogehoge") Dim objCom As New SqlCommand("SELECT * FROM member WHERE LoginID=@LoginID AND LoginPass=@LoginPass", objDb) objCom.Parameters.Add("@LoginID", Login1.UserName) objCom.Parameters.Add("@LoginPass", Login1.Password) objDb.Open() Dim objDr As SqlDataReader = objCom.ExecuteReader() If objDr.Read() Then ' 検索の結果、該当するレコードが存在した場合、認証は成功 FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False) End If objDb.Close() End Sub ---------------------------------------------------------------------------------------------------------------- DB内のデータはとれている(objDrの中身が入ってることをデバック実行にて確認) ので、認証の部分で失敗しているのかと思い http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000010.aspx 等を参考してみたのですが、 「サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: SQL ネットワーク インターフェイス, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました) 」 というメッセージが出力されて、認証ができません。 どなたかアドバイス等ありましたらご教授できませんでしょうか。

  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • sqliteへのデータ追加

    sql文で質問です。接続は1-29の表示を確認済み。 掲示板を作る練習をしているのですが、とりあえずpostなどのユーザーから受け取り値をdbに保存・表示する前に、自分で保存(カラムは左から順にid,name,sexになっていてidの1~29は埋まっている状態です。)・表示してみようと思いtest.dbのhumanテーブルに「データの追加」と表記している部分をテーブルに書き込み表示したいのですが、エラーは表示されないもののid30番にデータの追加ができておらず困っています。 データを追加する方法を教えてください。 <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの追加 $sql = 'INSERT INTO human( id, name, sex, ) VALUES ( 30, "吉川", "男", )'; // データの取得 $sql = 'SELECT * FROM human WHERE id BETWEEN 1 AND 50;'; $res = $db->query($sql); while( $row = $res->fetchArray() ) { echo '<ul>'.'<li>'. $row[0] . $row[1] .$row[2].'<li>'.'<ul>';} ?>

  • IDが最大値のレコードに項目を追加

    MYSQLで、一度書き込み処理をさせ、 書き込んだIDを取得して加工したsubidを、 テーブルに再接続をしてIDの最大値を取得して、 それを最新のレコードとして追加で項目を書き込もうと思うのですが、 なぜかうまくいきません。 再接続の際に、先程書き込んだレコードを読み出す方法がまずいのでしょうか? どなたかご教授ください。 よろしくお願いいたします。 -----------省略----------- <?php $subid = $nosel . $finish ; $update_id = max(id); $db = mysql_connect("localhost","hogehoge",""); mysql_select_db("hogehogeuser"); $query = "update hogehoge set subid = \"$subid\" where ID = $update_id\""; mysql_query($query); mysql_close($db); ?>