2012-05-28 45 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

从我可以看到它似乎创建行但不正确。 –