C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQLサーバーで列をコピーしたい

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■94986 / inTopicNo.1)  SQLサーバーで列をコピーしたい
  
□投稿者/ たかし (50回)-(2020/06/09(Tue) 10:12:15)

分類:[データベース全般] 

お世話になっております、たかしです。

Q在庫一覧表(View)の「期末残高」列をT商品マスター(テーブル)の「期首残高」列に
丸々コピーしたくて、以下のようなプロシージャを考えたのですが、
「System.Data.SqlClient.SqlException- 'テーブル '' の列 '' に値 NULL を挿入できません。
この列では NULL 値が許可されていません。INSERT は失敗します。」
というエラーが出てしまいます。
コピーしたいのは期末残高のみで商品コードではないのですが、何故このようなエラーが出るのでしょうか?
どなたかよろしくお願いいたします。

INSERT INTO T商品マスター(
期首残高
)
SELECT
期末残高
FROM Q在庫一覧表

引用返信 編集キー/
■94987 / inTopicNo.2)  Re[1]: SQLサーバーで列をコピーしたい
□投稿者/ たかし (51回)-(2020/06/09(Tue) 10:21:10)
No94986 (たかし さん) に返信
> お世話になっております、たかしです。
>
> Q在庫一覧表(View)の「期末残高」列をT商品マスター(テーブル)の「期首残高」列に
> 丸々コピーしたくて、以下のようなプロシージャを考えたのですが、
> 「System.Data.SqlClient.SqlException- 'テーブル '' の列 '商品コード' に値 NULL を挿入できません。
> この列では NULL 値が許可されていません。INSERT は失敗します。」
> というエラーが出てしまいます。
> コピーしたいのは期末残高のみで商品コードではないのですが、何故このようなエラーが出るのでしょうか?
> どなたかよろしくお願いいたします。
>
> INSERT INTO T商品マスター(
> 期首残高
> )
> SELECT
> 期末残高
> FROM Q在庫一覧表
>
引用返信 編集キー/
■94988 / inTopicNo.3)  Re[2]: SQLサーバーで列をコピーしたい
□投稿者/ たかし (52回)-(2020/06/09(Tue) 10:26:22)
No94987 (たかし さん) に返信
> ■No94986 (たかし さん) に返信
>>お世話になっております、たかしです。
>>
>>Q在庫一覧表(View)の「期末残高」列をT商品マスター(テーブル)の「期首残高」列に
>>丸々コピーしたくて、以下のようなプロシージャを考えたのですが、
>>「System.Data.SqlClient.SqlException- 'テーブル '' の列 '商品コード' に値 NULL を挿入できません。
>>この列では NULL 値が許可されていません。INSERT は失敗します。」
>>というエラーが出てしまいます。
>>コピーしたいのは期末残高のみで商品コードではないのですが、何故このようなエラーが出るのでしょうか?
>>どなたかよろしくお願いいたします。
>>
>> INSERT INTO T商品マスター(
>> 期首残高
>> )
>>SELECT
>>期末残高
>>FROM Q在庫一覧表
>>

度々すいません、エラーの列名は'商品コード'です。
プライマリキーですのでNULL値ではありません。

引用返信 編集キー/
■94989 / inTopicNo.4)  Re[3]: SQLサーバーで列をコピーしたい
□投稿者/ shu (1226回)-(2020/06/09(Tue) 10:48:16)
No94988 (たかし さん) に返信

INSERTしているので
プライマリキーの列がNullでSelectした列が期首残高に入るよう
レコードを追加しようとしているためエラーになります。
T商品マスターにもともとデータがあってQ在庫一覧表に商品コードが該当する
列があるならjoinしてupdateするのがよいかと思います。
引用返信 編集キー/
■94990 / inTopicNo.5)  Re[3]: SQLサーバーで列をコピーしたい
□投稿者/ Hongliang (1049回)-(2020/06/09(Tue) 10:48:54)
> INSERT INTO T商品マスター(
> 期首残高
> )
> SELECT
> 期末残高
> FROM Q在庫一覧表

このクエリだと、T商品マスターの期首残高列以外の列にはすべて既定値が設定された新しい行が挿入されますが、普通に考えると商品コードなんて自動採番するものでもないでしょうしNULLとなって挿入失敗ということになるんじゃないでしょうか。
商品コードを持った行はすでにT商品マスターにあるのであればINSERTじゃなくてUPDATEを行うことになります。
INSERTする(T商品マスターにその商品コードを持った行がない)のであれば、少なくとも期末残高のほかに商品コードも一緒にINSERTする必要があるでしょう。
引用返信 編集キー/
■94991 / inTopicNo.6)  Re[3]: SQLサーバーで列をコピーしたい
□投稿者/ kiku (175回)-(2020/06/09(Tue) 11:05:03)
> >> INSERT INTO T商品マスター(
> >> 期首残高
> >> )
> >>SELECT
> >>期末残高
> >>FROM Q在庫一覧表

上記SQL文は下記の実行後のように、nullを挿入しようとしています。

●実行前
・T商品マスター
 商品コード,期首残高,A1,A2,A3
 1,100,A1,A2,A3
 2,200,A1,A2,A3
・Q在庫一覧表
 商品コード,期首残高,B1,B2,B3
 1,300,B1,B2,B3
 2,400,B1,B2,B3
 3,500,B1,B2,B3
 4,600,B1,B2,B3

●実行後
・T商品マスター
 商品コード,期首残高,A1,A2,A3
 1,100,A1,A2,A3
 2,200,A1,A2,A3
 null,300,null,null,null
 null,400,null,null,null
 null,500,null,null,null
 null,600,null,null,null


引用返信 編集キー/
■94992 / inTopicNo.7)  Re[4]: SQLサーバーで列をコピーしたい
□投稿者/ たかし (53回)-(2020/06/09(Tue) 12:43:02)
No94991 (kiku さん) に返信
>>>> INSERT INTO T商品マスター(
>>>> 期首残高
>>>> )
>>>>SELECT
>>>>期末残高
>>>>FROM Q在庫一覧表
>
> 上記SQL文は下記の実行後のように、nullを挿入しようとしています。
>
> ●実行前
> ・T商品マスター
>  商品コード,期首残高,A1,A2,A3
>  1,100,A1,A2,A3
>  2,200,A1,A2,A3
> ・Q在庫一覧表
>  商品コード,期首残高,B1,B2,B3
>  1,300,B1,B2,B3
>  2,400,B1,B2,B3
>  3,500,B1,B2,B3
>  4,600,B1,B2,B3
>
> ●実行後
> ・T商品マスター
>  商品コード,期首残高,A1,A2,A3
>  1,100,A1,A2,A3
>  2,200,A1,A2,A3
>  null,300,null,null,null
>  null,400,null,null,null
>  null,500,null,null,null
>  null,600,null,null,null
>
>

shuさん、Hongliangさん、kikuさん、ありがとうございました。
以下のようなコードでなんとか解決することが出来ました。

UPDATE T商品マスター
SET T商品マスター.期首残高 = Q在庫一覧表.期末残高
FROM Q在庫一覧表
WHERE Q在庫一覧表.商品コード = T商品マスター.商品コード

また解らないことが出てきたときは、よろしくお願いいたします。


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ