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 行,但它每次都会创建它们,所以我现在有 1000 多行而不是 150 多行

4

2 回答 2

0

确保您有一种将现有表与临时表链接的方法,例如在名称或 ID 上。假设您的现有表中已经有 Name,并且现有表称为 Currencies。

此时,您将需要更改您的货币表以包含新列(如果尚未这样做)。

然后按照以下方式更新货币(假设名称可用于关联货币和#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 * (取决于数据库和客户端,可能存在关于重复名称的错误,在这种情况下明确命名所有列)。

于 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 回答