解析中に値に挿入する方法がこれを行う最も効率的な方法であるかどうかはわかりません。私は各情報が文字列かint値かに基づいて格納されるロジックを分割しています。各情報のIDは、IDがIDでInfoDescriptionが名前であるInfoテーブルに格納されます。長いリストの文字列を解析中にSQLテーブルへの挿入を最適化する
ID Name DataType
1 weight int
2 price int
3 avilability string
CREATE TABLE [dbo].[Info](
[InfoID] [smallint] NOT NULL,
[InfoDescription] [varchar](100) NOT NULL,
[CreateDate] [datetime] NOT NULL
)
ので重量は、私は、文字列を解析しながら、このテーブルに値を挿入しようと思って、「重量」
の1のINfoIDとInfoDescriptionを持つことになります。 InfoID = 1、InfoInt = 50(0がデフォルトです)、InfoString = ""(必要があります-weight
"はい:50、価格::10、avilability重量" のようなたとえば何かのために
CREATE TABLE [dbo].[fruitLog]
(
[LogID] [bigint] NOT NULL,//auto increment maybe
[InfoID] [smallint] NOT NULL,
[InfoInt] [bigint] NOT NULL,
[InfoString] [varchar](100) NOT NULL,
)
-avilabilityがInfoID = 3、InfoInt = 0(0)はデフォルトで、InfoString = "yes" をfruitLog
のためになります
fruitLog
用)重量はint型ではなく、文字列のタイプであるので、これはロジックです私のコード://making a key value pair for the Info table so if I have a key of "Weight", I have it's value as 1(ID).
Dictionary<string,int> MsgList = new Dictionary<string,int>();
var list = result from "SELECT * FROM Info"//didn't want to write the whole code out
foreach(var item in list)
{
MsgList.Add(item.InfoDescription, item.InfoID);
}
foreach(var fruits in listOfFruits)
{
get.InfoCOMMAND();// will return something like {weight:50, price:10, avilability: yes}
//loop through the Info text and parse
{
if (parsedVariable.Equals("weight"))
{
InertIntoSQL(MsgList["weight"] , Convert.ToInt32(parsedVariable.value),"");
}
if (parsedVariable.Equals("price"))
{
InertIntoSQL(MsgList["price"] , Convert.ToInt32(parsedVariable.value, "");
}
if (parsedVariable.Equals("avilability"))
{
InertIntoSQL(MsgList["avilability"] , 0 , parsedVariable.value.toString());
}
}
}
InertIntoSQLはテーブルにそれらの変数を挿入します方法になります。私はこれを行うためのより効率的な方法があった場合ので、私は思っていた診断ログのための30以上の列を持っているつもりです\
。また、文字列を解析する最善の方法を知っている場合は、私に知らせてください。ありがとうございました。
あなたがやっているすべてのテーブル間でデータを移動している場合、なぜ往復を作りますあなたのC#のコードをまったく使っていますか?あなたはSQLであなたのロジックを使ってクエリを実行します。各レコードのデータベースへのラウンドトリップを行っている別のプログラムをループするのではなく、1セットの操作としてこれを行うのはずっと高速です。 – alroc
無関係ですが、あなたのキーに 'bigint'が必要ですか?あなたは20億以上の行を持っていると思いますか? [SQL Serverのデータ型](https://docs.microsoft.com/en-us/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql) –
データを格納するときSQLでは、一度に1つの値を増やすことはできません。各インサートは別の行に移動します。だからあなたはジグザグの配列に終わる。 – jdweng