3

SqlBulkCopy を使用して、プログラムで Excel から SQL Server 2005 にデータをエクスポートしています。私が抱えている唯一の問題は、Excelファイルにある行シーケンスが保持されないことです。並べ替える列がありません。Excel スプレッドシートに表示されるのと同じ順序でレコードを挿入したいだけです。

Excel ファイルを変更することはできず、取得したもので作業する必要があります。既存の列のいずれかで並べ替えると、順序が崩れます。

助けてください。

PSスプレッドシートにID列を挿入してしまいました。エクスポート/インポート中に順序を維持する方法がないようです

4

4 に答える 4

3

「ORDER BY」句を使用しない限り、行の順序がSQLによって指定または保証されるとは思いません。

Bill Vaughn の投稿 ( http://betav.com/blog/billva/2008/08/sql_server_indexing_tips_and_t.html ) から:

Order By の使用: テーブルに (物理的な順序でデータを格納する) クラスター化インデックスがある場合でも、SQL Server は、ORDER BY 句が使用されない限り、行がその (または特定の) 順序で返されることを保証しません。

情報を含む別のリンク:

http://sqlblogcasts.com/blogs/simons/archive/2007/08/21/What-is-the-position-of-a-row--.aspx

于 2008-10-10T00:44:24.227 に答える
0

Excel スプレッドシートを CSV として保存できる場合、スプレッドシートとまったく同じ順序で実行されるスクリプト言語を使用して、INSERT ステートメントのリストを簡単に生成できます。これは Groovy での簡単な例ですが、どのスクリプト言語でも同じように簡単に実行できます。

def file1 = new File('c:\\temp\\yourSpreadsheet.csv')
def file2 = new File('c:\\temp\\yourInsertScript.sql')

def reader = new FileReader(file1)
def writer = new FileWriter(file2)

reader.transformLine(writer) { line ->
    fields =  line.split(',')

    text = """INSERT INTO table1 (col1, col2, col3) VALUES ('${fields[0]}', '${fields[1]}', '${fields[2]}');"""

}

次に、データベースに対して「yourInsertScript.sql」を実行すると、注文はスプレッドシートと同じになります。

于 2008-10-10T00:41:15.980 に答える
0

データの読み込み中に自動インクリメントする ID 列をテーブルに定義することもできます。そうすれば、後でレコードを同じ順序で並べ替えたいときに並べ替えることができます。

于 2008-10-10T00:44:58.780 に答える