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

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

新規登録して質問してみよう
ただいま回答率
85.35%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

2074閲覧

シーケンスを利用して一括で連番を振ることを実現したい

ypk

総合スコア83

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/05/10 12:15

編集2021/05/10 12:23

こんばんは。

SQLにて、シーケンスを利用してあるテーブル(Aとする)に連番を振る処理をシーケンスを利用して実現できたらと考えています。

実現したいこと

以下のようなテーブルAがあるとします。

列2(主キー)列3
あああああいいいいい
かかかかかいいいいい
さささささいいいいい
たたたたたいいいいい

####テーブルB

連番列2列3
NULLNULLNULL
NULLNULLNULL
NULLNULLNULL
NULLNULLNULL

テーブルAに格納されているデータをすべてBに移行し、移行した際にシーケンスを利用して以下のように連番を振りたいです。

####テーブルB

連番列2列3
1あああああいいいいい
2かかかかかいいいいい
3さささささいいいいい
4たたたたたいいいいい

私が考えた方法

以下のような方法を考えてみたのですが、テーブルAとテーブルBは型が違うのでできません、、、

--シーケンスを生成 CREATE SEQUENCE Schema.SequenceName AS int INCREMENT BY 1 ;
---`プロシージャを生成 DECLARE @NextID int ; SET @NextID = NEXT VALUE FOR Schema.SequenceName; INSERT INTO B (連番, 列2, 列3) VALUES (select * from A inner join B on A ) ;

ここまでは考えてみたのですが、詰まってしまいなかなか進みません。
どなたか知恵を貸していただけないでしょうか。
どうぞよろしくお願いいたします。

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

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

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

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

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

maisumakun

2021/05/10 12:17 編集

> 列2(主キー) 全部「あああああ」になっていますが、本当に同じ値ばかり入っているのでしょうか?
ypk

2021/05/10 12:23

直しました。ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

aからbにデータを一括で移し替えてよいのであれば、次のようにすればよいと思います。

sql

1INSERT INTO b 2SELECT NEXT VALUE FOR seq, col2, col3 FROM a;

投稿2021/05/10 12:42

neko_the_shadow

総合スコア2349

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

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

ypk

2021/05/10 12:48

なるほど!ありがとうございます。 連番を入れたい列の位置に「NEXT VALUE FOR」を書いてあげればよいのですね。 ちなみになのですが、 --シーケンスを生成 CREATE SEQUENCE Schema.SequenceName AS int INCREMENT BY 1 ; ---`プロシージャを生成 DECLARE @NextID int ; SET @NextID = NEXT VALUE FOR Schema.SequenceName; INSERT INTO b SELECT NEXT VALUE FOR seq, col2, col3 FROM a; で私が実現したいことが実現できるという認識でよろしいでしょうか どうぞよろしくお願いいたします。
neko_the_shadow

2021/05/10 12:53

この2行は不要です。また回答ではシーケンスオブジェクトの名前はseqとしていますが、これは環境ごとに変更してください。 DECLARE @NextID int ; SET @NextID = NEXT VALUE FOR Schema.SequenceName;
ypk

2021/05/10 21:03

ご丁寧にありがとうございます。 最後に一つ、質問させてください。 >また回答ではシーケンスオブジェクトの名前はseqとしていますが、これは環境ごとに変更してください。 とありますが具体的にどういうことなのでしょうか。 もう少し、具体的に教えていただけると嬉しいです。 どうぞよろしくお願いいたします。
neko_the_shadow

2021/05/11 06:16

NEXT VALUE FOR ??? の ??? の部分には利用するシーケンスオブジェクトの名前を指定します。「環境ごとに変更してください」の意味は「???の部分には利用したいシーケンスオブジェクトの名前を指定してください」という意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問