0

私は現在、CSVからの情報を含む一時テーブルからの一括挿入を使用して、このテーブルの詳細を現在のテーブルに追加しようとしています(すでに情報が含まれているため、適切なテーブルを削除する必要はありません)。

最初にドロップされたテーブルは無視してください。これはテスト目的でした。今、私は次に何をする必要があるかについてちょっと困惑しています。単に更新テーブルを使用して列名を記述し、FROMステートメントを使用したいのでしょうか。

DROP TABLE #Currencies


CREATE TABLE #Currencies(
suffix nvarchar(50) NULL,
name nvarchar(50) NULL,
iso nvarchar(50) NULL)
GO

BULK INSERT #Currencies
FROM 'C:\Documents and Settings\ntaylor\Desktop\Currencies.csv'
WITH(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n')
GO

ALTER TABLE #Currencies
ADD version_number int NOT NULL default 1,
[precision] int NULL,
cur_id  [uniqueidentifier] NOT NULL default newid(),
exchange_rate decimal(19,5) NULL,
[default] bit NULL
GO


UPDATE #Currencies
SET [precision] = 2, exchange_rate = 1, [default] = 0

ALTER TABLE tbl_ecom_currency
ALTER COLUMN suffix nvarchar(50)

INSERT INTO tbl_ecom_currency (suffix, name, iso, version_number, [precision], cur_id, exchange_rate, [default])
SELECT  suffix, name, iso, version_number, [precision], cur_id, exchange_rate, [default]
FROM #Currencies

このクエリを実行した後、テーブル内のすべての行が作成されているという問題があるようですが、[上位200行の編集]をクリックすると表示されないため、適切な行ではないようですが、選択すると機能するようです。上位1000行を選択しますが、毎回作成されるため、150行以上ではなく1000行以上になります

4

2 に答える 2

0

名前やIDなど、既存のテーブルを一時テーブルにリンクする方法があることを確認してください。既存のテーブルにすでにNameがあり、既存のテーブルがCurrenciesと呼ばれていると仮定します。

この時点で、まだ行っていない場合は、新しい列を含めるために通貨テーブルを変更する必要があります。

次に、(Nameを使用して通貨と#Currenciesを相関させることができると仮定して)の行に沿って通貨を更新します。

UPDATE c SET c.prefix=t.prefix, c.iso=t.iso FROM Currencies c JOIN #Currencies t ON c.Name=t.Name

何が起こっているのかをよりよく理解するには、同じFROM句を使用してSELECT *を試してください(DBとクライアントによっては、名前の重複に関するエラーが発生する場合があります。その場合は、すべての列に明示的に名前を付けてください)。

于 2012-05-28T08:44:43.380 に答える
0

私はうまく実行できた次のコードを使用して、これに有効な方法を見つけることができました。

DROP TABLE #Currencies


CREATE TABLE #Currencies(
prefix nvarchar(50) NULL,
name nvarchar(50) NULL,
iso nvarchar(50) NULL)
GO

BULK INSERT #Currencies
FROM 'C:\Documents and Settings\ntaylor\Desktop\Currencies.csv'
WITH(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n')
GO

ALTER TABLE #Currencies
ADD version_number int NOT NULL default 1,
[precision] int NULL,
cur_id  [uniqueidentifier] NOT NULL default newid(),
exchange_rate decimal(19,5) NULL,
created datetime NULL,
[default] bit NULL
GO


UPDATE #Currencies
SET [precision] = 2, exchange_rate = 1, [default] = 0, created = GetDate()
GO

ALTER TABLE tbl_ecom_currency
ALTER COLUMN prefix nvarchar(50)
GO


INSERT INTO tbl_ecom_currency (prefix, name, iso, version_number, [precision], cur_id, exchange_rate, [default], created)
SELECT  prefix, name, iso, version_number, [precision], cur_id, exchange_rate, [default], created
FROM #Currencies
于 2012-05-28T10:12:33.270 に答える