使用CSV(SQL)从临时表批量更新/插入

时间:2012-05-28 08:17:37

标签: sql csv

我目前正在尝试使用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行时,但它每次创建它们所以我有1000多行现在反对150 +

2 个答案:

答案 0 :(得分:0)

确保您有办法将现有表格与临时表格相关联,例如在名称或身份证上。 假设您现有表中已有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 *(取决于数据库和客户端,可能存在关于重复名称的错误,在这种情况下明确命名所有列)。

答案 1 :(得分: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
相关问题