php - 使用php批量加载到天蓝色
问题描述
我正在尝试使用 PHP 将 CSV 加载到 Azure 网络服务器数据库。每个 CSV 文件有 2000 行。我让它工作了,但是当我在网页上运行文件时,数据库只更新了 479 个条目,我不知道为什么。该网页需要很长时间才能处理,然后它会显示页面说它已完成。这是我对插入语句的内容。
try {
$connection = new PDO("sqlsrv:server = tcp:".$SrvName.",1433; Database = ".$DBName, $SQL_USER, $SQL_PASS);
if (($handle = fopen("personal.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$sql = "INSERT INTO personal (clientId, lastname, ssn)
VALUES ($data[0], $data[1],$data[2])";
$statement = $connection->prepare($sql);
$statement->execute();
}
fclose($handle);
}
} catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
}
非常感谢任何帮助!
解决方案
我认为我们有两个解决方案:
解决方案
1 如何:将数据作为流发送:Microsoft Drivers for PHP for SQL Server 利用 PHP 流将大对象发送到服务器。
解决方案2
设计一个存储过程,将文件名作为参数传递。
示例代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spBulkInsert] @FileName varchar(255)
AS
declare @sql varchar(max)
BEGIN Try
set @sql =
'INSERT into ext.customer_Staging with (TABLOCK) (customer, age, gender)
SELECT * FROM OPENROWSET(
BULK '+ @FileName + ',
DATA_SOURCE = ''MyDataSource'',
FORMAT = ''CSV'',
FORMATFILE_DATA_SOURCE = ''MyDataSource''
) AS DataFile;
go'
exec(@sql)
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
GO
然后用php调用这个sqlserver存储过程实例。
但不要直接将BULK INSERT 插入到您的真实表中。
- 我总是会从 CSV 文件中插入临时表 ext.customer_Staging(没有 IDENTITY 列)
- 可能编辑/清理/操作您导入的数据
- 然后使用以下 T-SQL 语句将数据复制到真实表中:
INSERT into ext.customer_Staging with (TABLOCK) (customer, age, gender)
SELECT * FROM OPENROWSET(
BULK 'bs140513_032310-demo.csv',
DATA_SOURCE = 'MyDataSource',
FORMAT = 'CSV',
FORMATFILE_DATA_SOURCE = 'MyDataSource'
) AS DataFile;
go
INSERT INTO ext.customer(Name, Address)
SELECT customer, age, gender
FROM ext.customer_Staging
推荐阅读
- typo3 - 用typo3安装ckan
- sql - 考虑到用户和用户组元数据存储在数据库中,在 SQL Server 上实现 RLS 和 CLS 的最有效方法
- c++ - 如何获取 R 的辅助函数的 C/C++ 源代码?
- json - curl get is omitting json that is shown in the browser
- python - 下一个字典上更大的字符串排列和解决方案效率
- android - Android - asynctask 执行顺序
- excel - 为什么这个 SUMPRODUCT 会抛出错误?结构没问题,底层列无错误
- c# - c# uwp 多个活动蓝牙连接
- html - 媒体查询卡住
- c - 如何使用 gcc 编译器在 C 语言项目中查找死代码