web-dev-qa-db-ja.com

varchar値のリストを1つの列のテーブルに挿入する方法

SQL Server 2005の場合:

CREATE TABLE __RADHE
(
    itemNo varchar(10) not null primary key clustered
);
GO

INSERT INTO __RADHE ???

'34926840', '34927020', '34927202', '34927384', '34927566',
'34927830', '34927889', '34930743', '34930750', '34927897',
'34927848', '34927574', '34927392', '34927210', '34927038',
'34926857', '34917120', '34917286', '34917443', '34926865',
'34927046', '34927228', '34927400', '34927582', '34927855',
'34927905', '34930768', '34930776', '34927913', '34927863',
'34927590', '34927418', '34927236', '34927053', '34926873',
'34917450', '34917294', '34917138', '34917146', '34917302',
'34917468', '34926881', '34927061', '34927244', '34927426',
'34927608', '34927871', '34927921', '34930784', '34927616',
'34927434', '34927251', '34927079', '34926899', '34917476',
'34917310', '34917153', '34917161', '34917328', '34917484',
'34926907', '34927087', '34927269', '34927442', '34927624',
'34927632', '34927459', '34927277', '34927095', '34926915',
'34917492', '34917336', '34917179', '34917187', '34917344',
'34917500', '34926923', '34927103', '34927285', '34927467',
'34927640', '34927657', '34927475', '34927293', '34927111',
'34926931', '34917518', '34917351', '34917195', '34917203',
'34917369', '34917526', '34926949', '34927129', '34927301',
'34927483', '34927665', '34927673', '34927491', '34927319',
'34927137', '34926956', '34917534', '34917377', '34917211',
'34917229', '34917385', '34917542', '34926964', '34927145',
'34927327', '34927509', '34927681', '34927699', '34927517',
'34927335', '34927152', '34926972', '34917559', '34917393',
'34917237', '34917245', '34917401', '34917567', '34926980',
'34927160', '34927343', '34927525', '34927707', '34927715',
'34927533', '34927350', '34927178', '34926998', '34917575',
'34917419', '34917252', '34917260', '34917427', '34917583',
'34927004', '34927186', '34927368', '34927541', '34927723',
'34927731', '34927558', '34927376', '34927194', '34927012',
'34917591', '34917435', '34917278', '34916577', '34916676',
'34933861', '34933879', '34929315', '34916684', '34916585',
'34909861', '34909879', '34916593', '34916692', '34929323',
'34933887', '34933895', '34929331', '34916700', '34916601',
'34909887', '34909895', '34916619', '34916718', '34929349',
'34933903', '34933911', '34929356', '34916726', '34916627',
'34909903', '34909911', '34916635', '34916734', '34929364',
'34933929', '34933937', '34929372', '34916742', '34916643',
'34909929', '34909937', '34916650', '34916759', '34929380',
'34933945'

どうすればこれを達成できますか?

2

SQL Server 2005を使用しているため、値ごとに1つの挿入を実行する必要があります。

何かのようなもの:

INSERT INTO __RADHE (ItemNo)
VALUES ('34933945');

コンマを必要な構文に置き換えるために、検索と置換を使用することをお勧めします。

上記の値リストのコンマを次のように置き換えます。

); INSERT INTO __RADHE (itemNo) VALUES (

ほぼすべての方法でそこに着くようです。

余談として;オブジェクトを参照するときは、常にスキーマを指定する必要があります。 PRIMARY KEY CLUSTEREDを指定すると、制約が暗黙的に作成され、名前を指定しない場合はSQL Serverによって名前が付けられます。 PK__T1__3214EC27023D5A04のような名前が気に入らない場合は、名前を指定します。

たとえば、CREATE TABLEステートメントは次のようになります。

CREATE TABLE dbo.[__RADHE]
(
    itemNo VARCHAR(10) NOT NULL 
        CONSTRAINT PK___RADHE
        PRIMARY KEY CLUSTERED
);

ソースデータに重複したエントリが含まれている可能性がある場合は、データが挿入されて重複が削除されるまで主キー制約の作成を遅らせる方が簡単な場合があります。そのためには、次のようなテーブルを作成します。

CREATE TABLE dbo.[__RADHE]
(
    itemNo VARCHAR(10) NOT NULL 
);

次に、上記のINSERT INTO ...ステートメントを使用してすべての行を挿入します。

これを実行して重複を削除します。

;WITH src AS (
    SELECT r.*
        , rn = ROW_NUMBER() OVER (PARTITION BY r.itemNo ORDER BY r.itemNo)
    FROM dbo.__RADHE r
)
DELETE
FROM src
WHERE rn > 1;

次に、主キー制約を作成します。

ALTER TABLE dbo.__RADHE
ADD CONSTRAINT pk__RADHE
PRIMARY KEY CLUSTERED
(itemNo);
8
Max Vernon