1 つの列に次のデータを含むテーブルがあります。
abc,2,2,34,5,3,2,34,32,2,3,2,2
def,2,2,34,5,3,2,34,32,2,3,2,2
このデータを別のテーブルに挿入したいのですが、FIELDTERMINATOR
inBULK INSERT
ステートメントを指定する方法と同じように、カンマを区切り記号として使用します。
T-SQLを使用してこれを行う方法はありますか?
1 つの列に次のデータを含むテーブルがあります。
abc,2,2,34,5,3,2,34,32,2,3,2,2
def,2,2,34,5,3,2,34,32,2,3,2,2
このデータを別のテーブルに挿入したいのですが、FIELDTERMINATOR
inBULK INSERT
ステートメントを指定する方法と同じように、カンマを区切り記号として使用します。
T-SQLを使用してこれを行う方法はありますか?
関数を使用しSplit
て文字列をテーブル変数に分割し、それらの値をテーブルに挿入する必要があります。
さまざまな長所と短所、さまざまな数のパラメーターなどを備えた、これらの分割関数がたくさんあります。
これは私が非常に気に入っているものです- 非常にうまくできていて、明確に説明されています.
この関数を使用すると、列を別のテーブルの個々のエントリに問題なく変換できます。
T-SQL で行う直接的な方法があるかどうかはわかりませんが、一括挿入を使用する場合はsqlcmd
、CSV ファイルにエクスポートしてから、一括挿入を使用してファイルをサーバーにインポートすることができます。
dbo.Split
関数を作成します。ここで参照できます。文字列を複数のレコードに分割します
。良い例がたくさんあります。
バッチ処理として実行したい場合は、実行sqlcmd
して「一括挿入」できます
sqlcmd -S MyServer -d myDB -E -Q "select dbo.Split(col1) from SomeTable"
-o "MyData.csv" -h-1 -s"," -w 700
-s"," sets the column seperator to
bulk insert destTable
from "MyData.csv"
with
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
それ以外の場合は、T-SQL で直接操作できますが、列定義の ID が同じであれば。
INSERT INTO DestinationTable
SELECT dbo.Split(col1) FROM SomeTable