2012-05-28 46 views
0

我當前正嘗試使用CSV中的信息從臨時表中進行批量插入,然後將此表的詳細信息添加到當前的表中(而不必刪除適當的表,因爲它包含的信息已經)我目前得到了這個:使用CSV(SQL)從臨時表批量更新/插入

請忽略開始時放棄表,這是爲了測試目的。現在我對下一步需要做的事情有點遺憾,我是否只想使用更新表並指定列名並使用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行,但它創建它們每一次,所以我有1000 +行現在反對150+

+0

你想要做什麼更新? –

+0

基本上我試圖得到3個新的列,名稱,前綴和ISO,因爲他們有信息添加到他們(因爲我最近才添加在此信息中),並插入到現有的表中,而不必刪除原。 –

+0

你爲什麼想這樣做?爲什麼不只是創建一個新表,將數據複製並刪除原來的?我認爲你過於複雜。似乎要走到我的路上。 – Ben

回答

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 
0

請確保您有一種方法鏈接現有表與臨時表,例如在名稱或ID上。 假設您已經在您的現有表中具有名稱,並且現有表稱爲貨幣。

在這一點上,您需要將您的貨幣表更改爲包含新列(如果尚未這樣做)。

然後更新沿線的貨幣(假設姓名可以用來貨幣和#Currencies關聯):

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

爲了更好地理解這是怎麼回事嘗試SELECT *與同一FROM子句(視數據庫和客戶端可能存在有關重複名稱的錯誤,請明確指出該情況下的所有列)。

+0

從我可以看到它似乎創建行但不正確。 –