1

答えは目の前にあると確信していますが、これを行う良い方法を見つけることができないようです。

で区切られた多くの値を含む文字列があります,。その文字列にいくつの値が含まれるかは(実行前に)わかりません。それらをデータベース(この場合はSQL Server 2008)に挿入したいのですが、文字列が大きすぎる可能性があるNVARCHAR(MAX)ため、一時テーブルを作成して値を挿入したいと考えています。

私はこのようなことを簡単に行うことができます(例として小さなものを作成します):

VB

myString = "101,102,103,104,105,106,107,108,109"

For Each value As String in myString.Split(",") 
    myCommand.CommandText = "INSERT INTO tempTable VALUES @value"
    myCommand.Parameters.AddWithValue("@value", value) 
Next

C#

myString = "101,102,103,104,105,106,107,108,109";

foreach (string value in myString.Split(','))
{
    myCommand.CommandText = "INSERT INTO tempTable VALUES @value";
    myCommand.Parameters.AddWithValue("@value", value);
} 

しかし、これはそれを行う方法ではありません。8000 のレコードがある場合、8000 の異なる挿入が発生し、これを行うことを考えただけでも解雇される可能性があります。

誰かが私を正しい方向に向けることができますか?

tl;dr

値を含む文字列は、この「001,002,003,004,005...8000」のようになります。8000ステートメント,を作成せずに、各値を で区切って挿入するにはどうすればよいですかINSERT

4

4 に答える 4

2

@pondlife が提案したように、文字列をテキスト ファイルに保存し、一括挿入を使用してデータをテーブルに挿入できます。

BULK
INSERT YourTable
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

詳細はこちらをご覧ください:

于 2013-05-03T13:37:00.477 に答える
0

ここに示すように、より大きなInsertステートメントを作成できます。

INSERT INTO tempTable (ColumnName) VALUES
    (@value1), (@value2)
于 2013-05-03T13:44:30.210 に答える
0

データベースからアプリケーションに値を読み取る場合は、次のようにする必要があります。

myString = "101,102,103,104,105,106,107,108,109";

myCommand.CommandText = String.Format(@"INSERT INTO tempTable 
                          SELECT Id from Guides Where Id in ({0})",myString);

これは、一度に複数の値を挿入するための高速で適切な方法です。

于 2013-05-03T14:43:17.830 に答える