
お世話になります。
SQLServseのストアドプロシージャで、あるテーブルのテストデータを100件ほど作成したいと思っています。
しかし、プロシージャを実行すると「プライマリキーが重複しています」とエラーが出ます。
テーブル内にはすでにCODE='0001'と'0101'の2件が存在します。そのため挿入開始コードは'0002'としたのですが・・・。まだ同じエラーが発生します。
テーブル名:MST_USER
CODE char(4) ←キー
KBN char(2)
NAME varchar(40)
PASS varchar(10)
作成したプロシージャ
CREATE PROCEDURE dbo.test_update_USER AS
declare @count int
declare @kbn int
set @count = 2
set @kbn = 0
while 1 = 1
begin
update MST_USER
set CODE = right('0000' + ltrim(str@count)), 4),
KBN = right('00' + ltrim(str(@kbn)), 2),
NAME = 'test' + ltrim(str(@count)),
PASS = 'test' + ltrim(str(@count))
set @count = @count + 1
if (@count > 100)
break
if (@kbn > 3)
set @kbn = 0
else
set @kbn = @kbn + 1
end
GO
何か間違えているのか自分ではわからなくなっている状態です。
どなたかご指摘いただけると幸いです。
No.2ベストアンサー
- 回答日時:
UPDATE文をWHERE句なしで使っていますが、これではうまくいきません。
INSERT文を使用するのが目的にかなっているのではないでしょうか。
今の状態での動きがどうなるかを見てみますと、ループの一回目で
UPDATE MST_USER
SET CODE = '0002',
KBN = '00',
NAME = 'test2',
PASS = 'test2'
というSQLを流すことになります。
元から入っている2レコードが、全てこのデータに更新されようとして、CODE 0002が2レコードになるため、エラーになります。
そうですね・・・
既存データを全て同じものに書き換えようとしているんですよね・・・。
ケアレスミスでした。
ご指摘ありがとうございます。
No.1
- 回答日時:
データを新規作成されるのですよね?
それならば、UPDATE文ではなく、INSERT文を使用すれば良いと思います。
update MST_USER
set CODE = right('0000' + ltrim(str@count)), 4),
KBN = right('00' + ltrim(str(@kbn)), 2),
NAME = 'test' + ltrim(str(@count)),
PASS = 'test' + ltrim(str(@count))
↓
INSERT INTO MST_USER
VALUES(right('0000' + ltrim(str@count)), 4),
right('00' + ltrim(str(@kbn)), 2),
'test' + ltrim(str(@count)),
'test' + ltrim(str(@count)))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# C言語 3 2022/11/09 13:27
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアドプロシージャについて
-
マクロの同時実行
-
ユーザーID入力について
-
SQLを教えてください
-
サブクエリ
-
SQLServerでtime型への変換
-
テーブルの結合(GROUP BY句の制...
-
定型メールからデターベースに...
-
javaAPIを使いこなすには
-
秒数をDATETIME型に変換して足...
-
英語での答え方はこれで正解で...
-
複数のフィールドからデータを...
-
noの用法について
-
行数の取得
-
【Oracle9i Gold】SQL*LOADERは...
-
SQL文の関数らしいのですが、意...
-
FORMで送信された項目名の格納...
-
MTS接続、ディスパッチャーに関...
-
タグを記録したテーブルの書き...
-
Auto Filter
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
BULKINSERTのWITHオプションに...
-
SQLServerでtime型への変換
-
片方のテーブルに無いデータを...
-
日付型項目のNULLについて(Pos...
-
データ突合のよい方法を教えて...
-
プロシージャがみつかりません...
-
参照渡しをする時は、渡される...
-
オークションでパソコンを売る場合
-
SQL文について
-
Access 2000 サブクエリとJOIN
-
こういう使い方はありですか?
-
MS SQL Serverでのクエリ文
-
DELETEについて(結合による)
-
UPDATEについて(結合による)
-
InputBoxについて
-
VBA 100億になると#が自動...
-
【SQL】指定期間の合計、MAX...
-
sql express内部結合して重複行...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
おすすめ情報