是否可以通过匹配某个列,使用csv文件中的值更新SQL表中的列?
举例来说:
假设需要更新的表如下所示:
| Name | Email|
| ------- | ---- |
| John | |
| Elroy | |
| Tim | |
字符串
然后,包含需要从中获取的值的.csv文件看起来像这样:
| Name | Email |
| ------ | ---------------- |
| Elroy | elroy@domain.com |
| John | john@gmail.com |
| Tim | tim@domain.co.uk |
型
因此,需要遍历csv文件,在Name列中的值匹配的地方,使用相应的值更新SQL表中的Email列。有没有一种方法可以实现这一点,也许可以使用phpMyAdmin的UI?
这就是我要做的,但我不一定要将它们合并在一起,而不是更新值
SELECT
*
FROM left l
LEFT JOIN right r
ON l.name = r.name;
型
1条答案
按热度按时间zour9fqk1#
不需要。但是导入数据并使用一个表的内容更新另一个表并不太困难。
你可能会受益于潜入SSIS,有一个ui可以做这样的事情:https://learn.microsoft.com/en-us/sql/integration-services/sql-server-integration-services?view=sql-server-ver16
所以,但如果你不喜欢UI,我建议先加载文件,然后du和更新与导入的数据和您的目的地之间的地方。例如下面的例子。
就我个人而言,我会使用像C#这样的高级编程语言,以便能够更好地控制边缘情况并给予ui,因为我们很可能想要告诉某人数据是否是垃圾。
如果我被迫只使用TSQL,那么下面是一些沿着的东西。
使用TSQL的示例:要从T-SQL将CSV文件加载到表中,可以使用BULK INSERT语句。下面是一个例子:
在SQL Server数据库中创建与CSV文件结构匹配的表。
字符串
确保CSV文件存在并且可以从SQL Server示例访问。您可能需要将文件放置在SQL Server可以访问的位置。
使用BULKINSERT语句将CSV数据加载到表中。下面是一个例子:
型
在此示例中,将“C:\path\to\your\file.csv”替换为CSV文件的实际路径。根据CSV文件的结构调整FIELDTERMINATOR和ROWTERMINATOR选项。FIRSTROW选项用于跳过标题行(如果存在)。
执行BULKINSERT语句后,CSV文件中的数据将加载到数据库中的MyTable表中。确保您具有执行BULK INSERT语句和访问文件位置所需的权限。此外,请确保表中的列顺序和数据类型与CSV文件的结构匹配。
如果有两张table的话剩下的就不重要了吧?如果没有做评论,我很乐意分享
// update:添加了一个使用元素的实现
所以很明显,一旦你在导入表中有了数据,你就可以应用任何你想要更新的范例,这里我选择如果在导入中存在,我必须更新,如果是新的,我将添加,如果不是,我将离开。
显然,transact sql真的很旧,很笨重,所以基本上你可以有一个锤子和钉子,所以这将不得不做的一切,不是很漂亮,显然应该升级与索引肯定,但在快速草案可能是:
型