2017-03-14 4 views
0

私のSQL Serverテーブルが挿入データ

Col1 | Col2 | Col3 | Col4 | Col5 

私は私のデータテーブルからの値をマッピングするにはどうすればよい
Col X | Col Y | Col Z 

のような私のDataTableに見えるようになりますと仮定SQL Serverテーブルの特定の列

データテーブルには多数の行が含まれていますので、行単位の挿入を避けたいと考えています。

これを達成するにはどうすればよいでしょうか?

+0

を? –

+1

テーブル値のパラメータを持つストアドプロシージャを使用します。 –

+0

@LeiYangこのシナリオでは、insertコマンドをループして、行を1つずつSQLテーブルに挿入することができます。私のデータテーブルには1000以上の行が含まれているので、このアプローチを使用したくありません。 – sidGupta

答えて

1

テーブル値パラメータとストアド・プロシージャを使用。
c#データテーブルと同じ構造のユーザー定義テーブルタイプを作成します。 この型の列は、列の順序を含め、c#データテーブルの列と正確に一致する必要があります。

CREATE TYPE dbo.MyTableType AS TABLE 
(
    ColX int, -- Must be the same data type of ColX in your c# data table 
    ColY nvarchar(200), -- Must be the same data type of ColY in your c# data table 
    ColZ float -- Must be the same data type of ColZ in your c# data table 
) 

次に、あなたが実際の列のマッピングを行いますストアドプロシージャ、作成することができます:あなたは「行挿入して、行の使用を避ける」によって何を意味

CREATE PROCEDURE InsertIntoMyTable 
(
    @TableToInsert dbo.MyTableType READONLY -- Table valued parameters must be readonly! 
) 
AS 
    INSERT INTO MyTable (Col1, Col2, Col3) 
    SELECT ColZ, ColX, ColY 
    FROM @TableToInsert 
GO 
1

これは、あなたが

SqlBulkCopy.WriteToServer方法(DataTableの)SqlBulkCopy オブジェクトのDestinationTableNameプロパティで指定された宛先表に

コピー供給DataTableのすべての行を助けるかもしれません。

https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx

+0

これは、DatatableからSQLへのColumnMappingsを指定することによって使用できます。 – sidGupta