我仍然是使用SQL的新手,这个查询让我特别困惑。
我正在将一个.CSV
文件导入一个临时表(它只有1列宽并且导入正常但第一行除外,因为某些原因是空白的)以便更新表格匹配导入列时的现有数据库。
我遇到的问题是它只匹配导入表中的最后一个条目,并且只更新现有表中的1条记录。 .CSV
文件是从扩展生成的,而扩展又是从现有数据库的查询生成的,因此我知道名称是正确的,并且它们位于临时表中。
我已经看到了几个类似的查询问题/解决方案,并尝试使用他们的部分解决方案无济于事,我希望这个社区可以帮助我!
if object_id('dbo.namefile', 'u') is not null
drop table dbo.namefile
create table dbo.namefile
(
name varchar(255) not null primary key
--constraint pk_t1_name check(name not like 'zzzzzzz')
)
bulk insert dbo.namefile
from 'f:\list.csv'
with (datafiletype = 'char',
fieldterminator = '","',
rowterminator = '\r',
errorfile = 'f:\inp_err.log')
update dbo.MeasurementLimit
set LowLimit = 1
from namefile as nf
join EntityName as en on en.EntityName = nf.name
join MeasurementLimit as ml on en.uid = ml.UID
where en.EntityName = nf.name
感谢您的帮助
今天早上我试过这个
select * from namefile
它返回了113个记录list.csv文件中正确的条目数
但这仅返回1条记录
select * from namefile nf
inner join Entityname as en on en.Entityname = nf.listname
答案 0 :(得分:0)
我的猜测是问题是你没有使用update
的别名。这个版本怎么样:
update ml
set LowLimit = 1
from namefile as nf join
EntityName as en
on en.EntityName = nf.name join
MeasurementLimit as ml
on en.uid = ml.UID
where en.EntityName = nf.name;
答案 1 :(得分:0)
解决方案是在批量插入中..原始代码(上面)将在单个列csv文件中读取,但它还向表中添加了一个空白记录,这会搞砸您将针对它运行的任何查询更正的插入代码是
bulk insert namefile
from 'f:\list.csv'
(
datafiletype = 'char',
fieldterminator = ',', <========= This was wrong
rowterminator = '\n',<====== and this was wrong
errorfile = 'f:\inp_err.log'
);