ストアドプロシージャベースのレポートルーチンをC#で実行するよう変換中です。一般的な考え方は、C#/ .NET Frameworkのすべての驚異を使い、その結果をDBに戻すことです。私は昨日逃げ出した問題を除いて、すべてがうまくいっています。SqlBulkCopyによる列名の使用
インポートを行うには、プログラムでDataTableを作成し、SqlBulkCopyを使用して結果をサーバーに移動します。
DataTable detail = new DataTable();
detail.Columns.Add(new DataColumn("Stock", Type.GetType("System.Decimal")));
detail.Columns.Add(new DataColumn("Receipts", Type.GetType("System.Decimal")));
detail.Columns.Add(new DataColumn("Orders", Type.GetType("System.Decimal")));
インポートテーブルのフィールドの順序は、次のとおりです。
...
Stock decimal(18,4),
Orders decimal(18,4),
Receipts decimal(18,4)
...
本質的に、領収書の値は注文に入り、その逆もあります。
明らかに、これはSqlBulkCopyが列挙した列名を尊重していないように見えるため、明らかに序数の位置になります。
私はRedgateのSQL Compareを使用しているので、これは問題です。あるデータベースから別のデータベースに変更をプッシュする場合、列の順序の位置は必ずしも維持されません。 (たとえば、新しい列を3番目の序数フィールドとして挿入した場合、SQL Compareはそれを同期のテーブルに追加して最後の列にします)。
これは私の解決策に真剣に迷い込んでいます。さて、これらは「インポート」テーブルだけなので、必要に応じて、順序付けされた位置をそのままの状態で移行スクリプトの一部として削除して再作成することができます。私はむしろそれをやっていないだろう。
強制的にSqlBulkCopyで記入した列名を守る方法はありますか?
P.S.には、新しい列の同期中に列の順序を同じに保つ「強制列順序」というプロジェクトオプションがRed Gate SQL Compareにあります。 (あなたには、テーブルを落として再構築する必要がありますが、絶対に必要な時は過去に私のためにうまくいきました) – Funka