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

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

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

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

Q&A

解決済

2回答

3662閲覧

SQLSERVERのINSERT時にIDENTITYの自動採番された値を編集した値を他の列に入力できますか?

Com

総合スコア30

SQL Server

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

0グッド

0クリップ

投稿2021/11/30 06:20

MS SQLSERVER 2014 スタンダード を利用しております。

例えばこんなテーブルがあったとして

create table table_A( id int identity(1,1) ,sub_id int ,memo nvarchar(1000) );

INSERT するときにこういう処理をできるものでしょうか?

insert into table_A( sub_id ,memo ) values ( 採番されるID * -1 ← こんな感じ ,'hogehoge' );

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

未検証。IDENT_CURRENT(テーブル名)取れるしなんなら
select max書けばいいだけじゃないの?
同時実行とかする場合はのSQLの実行のタイミングを考慮しないといけないかもだけど

sql

1insert into table_A( 2 sub_id 3 ,memo 4) values ( 5 (IDENT_CURRENT('table_A')+1) * -1 ← こんな感じ 6 ,'hogehoge' 7);

sql

1insert into table_A( 2 sub_id 3 ,memo 4) select 5 (select max(id)+1 from table_A) * -1 ← こんな感じ 6 ,'hogehoge' 7;

投稿2021/11/30 07:22

編集2021/11/30 07:23
sousuke

総合スコア3828

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

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

Com

2021/11/30 07:39

ありがとうございます! まさしく、欲しかった関数です! これ、SELECTで確認すると現在の最大値を返しますが INSERTの入力値に指定すると、新たに採番する番号を取得していました。 なのでここの【IDENT_CURRENT('table_A')+1】 +1 も必要なく優秀ですね! 大変助かりました m(_ _)m
guest

0

可能か不可能かという意味なら単純に
SET IDENTITY_INSERT

でOFFにすればIDENTITYを無効化できるんで可能。

投稿2021/11/30 06:30

gentaro

総合スコア8949

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

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

Com

2021/11/30 06:51

ご回答ありがとうございます。 なるほど、自動採番されるデータを加工することはできなくても MAX(id) + 1 * -1 といった処理で回避すればよいって感じですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問