我正在尝试基于CSV文件更新一个表。我有CSV中id和trim号的列表,我需要根据SQL表中的特定id更新Trim号。
到目前为止我写的剧本
-- Create a temporary table for the import
drop table #InterpreterTrimNumbers
CREATE TABLE #InterpreterTrimNumbers(
[SAPInterpreterId] int,
TempTrimNumber varchar(100)
)
BEGIN TRANSACTION
-- Bulk import into the temporary table
BULK INSERT #InterpreterTrimNumbers FROM 'C:\CSVData\Trim numbers.csv' WITH (
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
ERRORFILE = 'C:\CSVData\Trim numbers-errors.csv',
TABLOCK
)
update Interpreters set TrimNumber = (select TempTrimNumber from #InterpreterTrimNumbers where #InterpreterTrimNumbers.SAPInterpreterId = Interpreters.SAPInterpreterID )
Commit Transaction这一个返回1824行受影响,即使CSV文件只有110条记录。我只想用特定的SAPInterpreterID更新记录
任何帮助都是非常感谢的。
发布于 2015-05-29 04:40:46
假设只有110个记录被插入到临时表中,并且ID在解释器表中是唯一的,那么语法应该是这样的。
UPDATE i
SET TrimNumber = tempintr.TempTrimNumber
FROM Interpreters AS i INNER JOIN
#InterpreterTrimNumbers tempintr
ON i.TrimNumber= tempintr.TempTrimNumber您的查询之所以不能工作,是因为它试图更新解释器表中的每个数字。当临时表上有匹配时,是的,这就是您所需要的。但是,当没有匹配时,查询将返回NULL,导致不匹配的记录被更新为NULL。
发布于 2020-10-12 19:21:40
df10 = pd.read_csv("/tmp/z34.csv")
iters = df10.iterrows()
for index, row in iters:
conn = psycopg2.connect(host=rds_host,
database=db_name,
user=name,
password=password)
cur.execute(
'UPDATE "master_brand" SET "description" = %s, "created_at" = %s,
"updated_at" = %s WHERE "master_brand"."brand_name" = %s',
[row['description'], row['created_at'], row['updated_at'],
row['brand_name']])
conn.commit()
conn.close()https://stackoverflow.com/questions/30521009
复制相似问题