したがって、コンマで区切られたリストがあり、それをデータベースに挿入する必要があります。ただし、リスト内の各値を独自のテーブル行に挿入する必要があります。したがって、基本的には、リストを個別の値に分割してから、それらの値のそれぞれを新しい行に挿入する必要があります。
T-SQLにSTRING_SPLIT()
が追加されました このタイプの操作を簡単にする機能。この関数はSQLServer2016で最初に使用可能になり、互換性レベルが130以上のデータベースで使用できます(データベースの互換性レベルを確認する方法と変更する方法)。
例
次のカンマ区切りのリストがあるとします。
Cat,Dog,Rabbit
STRING_SPLIT()
を使用できます 各値を独自の行に分割する関数。このように:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
結果:
value ------ Cat Dog Rabbit
ですから、私たちはすでに中途半端です。実際、要件によっては、これで十分な場合もあります。
値をテーブルに挿入
上記のコードを取得して、INSERT()
で使用できます。 声明。つまり、これらの値をテーブルに挿入すると、各リストアイテムが独自の行に配置されます。これを行うには、前のコードの前にINSERT()
を付けるだけです。 ステートメント。
例:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
これにより、各値がAnimalName
の独自の行に挿入されます。 Animals
の列 テーブル。
結果を確認する
結果を確認するには、SELECT
を実行します テーブルに対するステートメント:
SELECT * FROM Animals;
結果:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
この結果は、AnimalId
が 列はIDENTITY
列(増分値は新しい行ごとに自動的に挿入されます)。
完全なスクリプト
上記の例を一度に実行できるスクリプトを次に示します。データベースを作成し、テーブルを作成し、データを挿入してから、結果を確認します。
データベースを作成します:
/* Create database */ USE master; CREATE DATABASE Nature;
残りを行う:
/* Create table */ USE Nature; CREATE TABLE Animals ( AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AnimalName nvarchar(255) NOT NULL ); /* Insert data from the list */ INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ','); /* Check the result */ SELECT * FROM Animals;