我一开始试过谷歌,但没有运气。是否可以从 csv 文件更新表格?我正在使用 SQL 开发人员,并且正在使用脚本将编辑过的行导出到 csv 文件。我想通过客户端的 csv 文件更新编辑过的行。我不想导入整个文件,因为客户端已经有一个镜像表,我只想更新 csv 文件中的数据。这可能吗?
如果不是最好的方法是什么?
我有一张这样的表:
| ID | OtherID | Data
+--------+-----------+---------------------------
| 5059 | 73831 | 5103,5107
| 5059 | 73941 | 5103,5104,5107
| 5059 | 73974 | 5103,5106,5107,5108
Run Code Online (Sandbox Code Playgroud)
结果应该返回单独的行,如下所示:
| ID | OtherID | Data
+--------+-----------+--------------------------
| 5059 | 73831 | 5103
| 5059 | 73831 | 5107
| 5059 | 73941 | 5103
| 5059 | 73941 | 5104
| 5059 | 73941 | 5107
| 5059 | 73974 | 5103
| 5059 | 73974 | 5106
| 5059 | 73974 …Run Code Online (Sandbox Code Playgroud) 我有一个带有导出表的 CSV 文件,其中包含不包含值的字段的行。列使用“,”分隔,如果字段没有值,它们看起来像这样:,,,,,, 我尝试使用以下代码加载数据:
LOAD DATA INFILE "C:/table.csv"
INTO TABLE target_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
Run Code Online (Sandbox Code Playgroud)
目标表中的列(要加载此 CSV 文件中的数据)可以为空,但服务器返回错误:
"Incorrect integer value"
Run Code Online (Sandbox Code Playgroud)
当我在 CSV 文件中的逗号之间放置 NULL 时,服务器不会返回任何错误。是否可以更改某些设置以在不更改 CSV 文件的情况下加载表?
我正在尝试使用批量插入将 .CSV 文件导入到 mssql 表中(尽管我对其他方法持开放态度)。我有一个批量插入 sql 语句,但是当我执行文件时它说(0 行受影响)。但是,我在文件本身中有数据。
示例 CSV 文件(标题 + 标题下方的一行)
.CSV 标题
更改,停用,锁定,noemail,empno,orighire,薪水,salut,fname,mi,lname,用户名,hstreet1,hstreet2,hcity,hstate,hcountry,hzip,busphone,busext,蜂窝,empemail,职位,工作代码,工作组, orglevel1,orglevel2,orglevel3,orglevel4,orglevel5,company,perfdate,supervisor,misc1,misc2,misc3,misc4,active
.CSV 内容
2014-04-03 00:00:00,NO ,NO ,NO ,1133,2014-04-03 00:00:00,1111.1111,,test,test,test,user.test,111 测试方式,,萨克拉门托, CA,USA,11111,,,,test@test.org,test test,057,02,sss,261,SAC,,test,ttt,1911-11-11 00:00:00,1111,N,,test ,0,NULL
.SQL
BULK
INSERT dbo.Archive
FROM 'C:\scripts\User.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\r\n',
FIRSTROW = 2
)
GO
Run Code Online (Sandbox Code Playgroud)
我试图通过 ps 实现这一点,这是结果和代码:
# Database variables
$sqlserver = "dbserver"
$database = "db"
$table = "tb"
# CSV variables
$csvfile = "C:\scripts\User.csv"
$csvdelimiter = ","
$firstRowColumnNames = $true
################### No need to …Run Code Online (Sandbox Code Playgroud) 以下查询完美导入 100,000,但更大的文件没有任何反应。没有错误,没有加载行。
您可以提供任何线索表示赞赏。我花了几个小时研究最大文件和内存限制并需要帮助。谢谢!
LOAD DATA LOCAL INFILE 'C:\\temp\\masterplay\\bigone.csv'
INTO TABLE mytable
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(`MARK`,`SERIAL NUMBER`, ...thirty some columns...)
0 rows inserted. (Query took 2.2385 sec)
Run Code Online (Sandbox Code Playgroud)
以上在 100,000 条记录上表现完美且快速,对 350,000 条记录没有任何作用。当 CSV 分解为 100,000 多条记录时,导入工作正常。
示例 CSV 文件大小为 314,946 条记录。每行平均 551 个字符。最大行长度为 575。版本:MYSQL 5.6.17、PHP 5.5.12 WAMPSERVER 2.5、Windows 10 Pro 16 GB RAM。无法确定故障模式,因此没有参考文件中的截止。
根据下面的建议,在其他版本和 Linux 上尝试了相同的 SQL,同样的问题。
更新:
下面的想法让我专注于源 CSV 文件。到目前为止,我发现重新保存 CSV(即使它使用 CSV 应用程序检查良好并且在名称和内容上看起来相同)以某种方式修复了文件,以便导入。我有数百个大文件要处理,但不明白有什么区别。
文件以逗号分隔,没有文本分隔符。重新保存文件后,它的内容似乎仍然相同,但文件大小大约增加了 300K。CSV 文件类型是否具有不同的标题或元数据?
PostgreSQLCOPY命令是否可以选择将 CSV 列映射到的字段?
PostgreSQLCOPY命令似乎期望目标表与其列完全匹配。我错过了什么还是它实际上是如何工作的?
是否有一些替代命令可以启用它?
是否可以在 SQL Server Management Studio 中读取 CSV 并每行执行 SQL 更新?
例子
数据.csv
"column1","column2,"column3"
"column1","column2,"column3"
"column1","column2,"column3"
"column1","column2,"column3"
"column1","column2,"column3"
我想根据每行中的数据运行 SQL 更新,例如
UPDATE [data].[orders] set order_number = $column1, something_else = $column2 where order = $column3
这可以在 SQL Server Management Studio 中完成吗?
我需要以可以导入 Microsoft SQL Server 数据库的格式提供数据;但是,我没有 Windows 或无法访问 SQL Server 实例。
数据目前位于多个 CSV 电子表格中。我查看了BULK INSERT但发现他们对 CSV 的支持非常有限,例如无法识别双引号(文档:指定字段和行终止符)。我读过不支持边缘情况,例如字段恰好包含引号(因此需要转义)。
是否有更可靠的中间格式可以从 Linux/OSX 生成?例如 MySQL 转储、Excel、Sqlite、XML 等?
我还需要这个导入过程来创建表而不需要编码。导入的人是非技术人员。这将是一个一次性的过程。
我将无法测试导入,因为我无法直接访问 SQL Server 数据库,因此我正在寻找更可靠的方法。例如 MySQL 转储、XLS、XML 等。
给定这样的架构:
CREATE TABLE Foo
(
Id int PRIMARY KEY,
Position int NOT NULL,
Title varchar(10) NOT NULL
);
INSERT INTO Foo VALUES
(1, 3, 'Title3'),
(2, 10, 'Title10'),
(3, 1, 'Title1'),
(4, 12, 'Title12'),
(5, 2, 'Title2');
Run Code Online (Sandbox Code Playgroud)
我需要生成一个逗号分隔的字符串,按Position以下顺序排序:
'M' + Id + ' AS [' + Title + ']'
Run Code Online (Sandbox Code Playgroud)
想要的结果:
M1 AS [Title1], M2 AS [Title10], M3 AS [Title3], M4 AS [Title10], M5 AS [Title12]
Run Code Online (Sandbox Code Playgroud)
我试过了:
DECLARE @rows nvarchar(max);
SET @rows = STUFF((SELECT DISTINCT ', ' + ('M' …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 SQL Server 2008 中导入 CSV 文件。BULK INSERT是一种方法,但它适用于SQL Server 2014 以后的CSV 。
实现这一目标的替代方法是什么?
任何想法/想法都非常感谢。
csv ×10
import ×5
sql-server ×4
mysql ×2
bulk-insert ×1
copy ×1
db2 ×1
db2-9.7 ×1
db2-luw ×1
errors ×1
linux ×1
mac-os-x ×1
oracle ×1
oracle-11g ×1
order-by ×1
postgresql ×1