質問するログイン新規登録

Q&A

解決済

1回答

551閲覧

外部からのデータをSQLで登録する際の手法について

REIA

総合スコア30

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL

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

0グッド

0クリップ

投稿2025/04/02 08:55

0

0

前提

  • DB : SQL Server
  • 言語 : C#
  • FW : .NetFramewofk4.8

処理の目的

複数データ(100行6カラム)をexcelから読み取り
DB内でカラムAが重複してるときカラムBを更新する
(実際はwithでサブクエリを分解したいほど複雑)

概要

2テーブル登場しまして
仮にTA,TB...とおきます。
取得物含め構造を模したダミーですが、
大体以下の形でクエリを組んでいて、実際は3,4テーブル絡んでます。

SQL

1INSERT INTO #TARGET 2SELECT 3 TB.NAME 4 ,TEST.NAME 5FROM TB inner join ( 6 SELECT 7 TA.ID AS ID 8 ,@外部Name AS NAME 9 FROM 10 TA 11 WHERE 12 TA.ID = @外部ID 13) AS TEST 14ON TB.ID = TEST.ID 15WHERE 16 TB.NAME = TEST.NAME

試したこと 考えていること

前提で記載した通り、バインド変数には複数の値を入れることになりますので
ぱっと思いついたのはこのでか目なINSERTを100行分書き、バインド変数を連番にして割り当てることです。
ただそうするとログも見づらいですし、何よりグルグルSQLチックになりそうで重いと考えます。

帰宅中に思いついたのが、外部データも一時テーブル化し参照したほうが
まだましかなと思うのですが、その他の手法はございますでしょうか?

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

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

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

guest

回答1

0

ベストアンサー

外部データも一時テーブル化し参照したほうが、まだましかなと思うのですが、その他の手法はございますでしょうか?

外部からのデータは不確かである事を前提にして、全て文字型の一時テーブルに取り込んで処理しますね。
テーブルデータにすると、チェックや反映など一括で行えますし、一時テーブルであってもインデックスを適用する事によって、高速化も望めます。

他の方法としては、外部リンクを使用する方法もありますが、一時テーブルに格納する方が使い勝手が良いと思います。
SQL Server のリンク サーバーおよび分散クエリで Excel を使用する方法

投稿2025/04/03 08:53

sazi

総合スコア25437

REIA

2025/04/03 22:29

やっぱそれしか無いですよね。。 これはこれで一時テーブルへのInsertはありますが 素人過ぎてINDEXの頭は無かったので勉強になります!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問