• ベストアンサー

SQLのインサートでヌルを挿入できないというエラー

SQLサーバーで、INSERT INTO・・・selectで抽出した列の値を入れたいのですが、主キーのところで下記のエラーが出ます。 テーブル ・・・の列 '・・・' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 selectで抽出するテーブルの該当列を確認しても値はあるはずですが・・。 原因は何が考えられますか? お願いします・・・。

noname#171869
noname#171869

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

  • ベストアンサー
  • nesty7
  • ベストアンサー率53% (8/15)
回答No.1

こんばんは、はじめまして。 うーん…それだけだと何とも言えませんので、 とりあえずSQL文を全文載せてみてはいかがでしょうか。 挿入する値の順番が誤っているとか、 そんなことはありませんよね?

noname#171869
質問者

お礼

会社でやってることなんでソースを載せられません・・。 そうですよね、アドバイスの仕様がないですね。申し訳ございません。 ありがとうございました。

関連するQ&A

  • NULL 値が許可されていません

    SQLServer2008かじり始めの素人です。ご教授願います。 MicrosoftSQLManagementStudioにて、「新しいクエリ」で以下のクエリ実行で 以下のエラーが出ます。対応ご存知な方がいらっしゃいましたら 教えてください。 【環境】Windows2003Server     SQLSERVER 2008 【テーブル構成】  データベース:BUHIN_SEA                  列 親: 部品テーブル(ID,工号,納入先,形式)            ↓      列 子: 納入先テーブル(NOUNYU_ID,納入先)   子: 形式テーブル(KEISIKI_ID形式) * NOUNYU_ID,KEISIKI_ID は主キー 設定 【クエリ】   INSERT INTO 納入先 ( 納入先) SELECT DISTINCT LTrim(部品テーブル.納入先) FROM 部品テーブル LEFT JOIN 納入先 ON 部品テーブル.納入先 = 納入先.納入先 WHERE (((LTrim(部品テーブル.納入先)) Is Not Null) AND ((納入先.納入先) Is Null)) ORDER BY LTrim(部品テーブル.納入先); 【実行結果】 メッセージ 515、レベル 16、状態 2、行 1 テーブル 'BUHIN_SEA.dbo.納入先' の列 'NONYU_ID' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 * 'NONYU_ID' は、主キーのため、NULLを許容できません。

  • 一括でINSERTする方法(PL/SQL)

    PL/SQLを利用して、下記3つのSQLを一括でinsertしたいと思います。 (値は、任意でありません。) PL/SQLに関して、初心者なので、どのように記述してよいか 分かりません。 サンプル的なソースを用いて解説して頂けるとありがたいです。 (1)INSERT INTO tb1(列1, 列2) VALUES('値1','値2') (2)INSERT INTO tb1(列1, 列2) VALUES('値3','値4') (3)INSERT INTO tb1(列1, 列2) VALUES('値5','値6')

  • ERROR1062:Duplicate entry.....というエラーが出てしまいました

    いつもお世話になります。 データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、 ERROR1062:Duplicate entry.....というエラーが出てしまいました。 お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。 【実行したSQL】 INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52 tblAの主キー:dataA1とdataA2 tblBの主キー:dataB1 dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • ACCESS SQLのINSERTについて

    TBLというテーブルにINSERT文を使用して1行レコードを追加したいです。TBLテーブルのカラムAにはシステム日付を、カラムBには別テーブルのselect count(*)の実行結果を挿入したいのですがうまくいきません。何か良い方法はございませんでしょうか? INSERT INTO カウンタ統計 ( [DATE], USER_COUNT ) VALUES (date(), (SELECT COUNT(*) FROM hiplus_HW_USER)); ※日付は問題なく挿入できるのですがSELECT文の結果が挿入できない状況です。宜しくお願いします.

  • insert into select で別テーブルのID分挿入したい

    SQLでこんなことは可能でしょうか。 列 IDとTEXT をもつテーブルA と、 列 IDをもつテーブルBがあります。 テーブルAに、テーブルBのID分のデータを挿入したいです。 TEXTはテーブルAのID=1のTEXTデータを全ての列に挿入します。 このような場合のSQL文を調べてるのですが、 なかなかわからなくて困っています。 insert into select b.id,a.text from tableA as a, tableB as b でもうまくいきませんでした。 何かいい方法はないでしょうか? 回答お待ちしております。

  • Insert文で・・・

    失礼します。SQL初心者なので質問します。 Insert into Aテーブル Select X , Y , Z From Bテーブル というSQLがあり、Aテーブルの列数を3から4にした際、AテーブルへのInsertの項目を、BテーブルからSelectされたX,Y,Z以外に普通の変数αも新たに作成した4つめの項目として同時にInsertしたい場合、どのようなSQLにすれば良いでしょうか? Insert into Aテーブル (Select X , Y , Z From Bテーブル),α みたいに都合良くはいきませんよね??

  • Insert Into Select での重複について

    DB:SQLServer2000 こんにちは お世話になっております。 トランザクションのテーブルA から ワークのテーブルBへInsert Into Select を使用してデータを格納しているのですが、その際に重複が発生してしまいます。 テーブルA 主キーあり テーブルB 主キーなし Delete B Insert into B select 項目1,項目2,・・・ from A With(Nolock) where 日付項目 = 20080101 テーブルAの主キー項目は全てテーブルBへInsertしており、Insert完了後のテーブルBの中身を見ると、まれに全く同じデータが2件出来ていることがあります。 このInsert into selectが実行されている間に、テーブルAに対して登録更新が行われることもあります。 色々と試してはいるのですが、原因が特定できずに困っております。 もし何かお気づきになられる方がいらっしゃいましたら、ご教示下さい。 よろしくお願い致します。

  • insert時に日付のフィールドにnullを入れたい

    テーブルに以下のフィールドがあります。 [No],[区分],[キーNo],[日付] このテーブルに日付のデータのない、以下のようなデータをインサートしたいのですが、 [No],[区分],[キーNo] 1 ,kbn1 , key1 strSQL1 = "INSERT INTO テーブル1" & " ([No],[区分],[キーNo],[日付])" _ & " VALUES ("1","kbn1","key1",NULL )" とするとエラーが出てしまいます。日付フィールドに何も入れないようにinsert文を書くにはどうしたらよいでしょうか。 すみません、アドバイス等宜しくお願いします。

  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • 副問合せをいれたINSERT文で、問合せ結果が無い場合

    副問合せをいれたINSERT文で、問合せ結果が無い場合 環境はSQL Server2005です。 テーブルA,テーブルBが存在し、テーブルAにレコード追加する際に一部をテーブルBから抽出して、 INSERTしようとしています。 [SQL文]  INSERT INTO テーブルA(フィールド1, フィールド2, フィールド3,フィールド4・・・)   SELECT 'AAA', 'BBB' ,B.フィールド3, B.フィールド4 ・・・   FROM テーブルB B WHERE ~ この場合、テーブルBにWHEREで指定した条件のレコードが存在しない場合はINSERTされなくなってしまいます。 存在しない場合は、該当のフィールドにはNULLをいれたいのですが、テーブルBからの結果が存在しない場合でも テーブルAにINSERTする方法はありますか?