簡體   English   中英

使用 php 批量加載到 azure

[英]bulk load to azure using php

我正在嘗試使用 PHP 將 CSV 加載到 Azure 網絡服務器數據庫。 每個 CSV 文件有 2000 行。 我讓它工作了,但是當我在 web 頁面上運行文件時,數據庫只更新了 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
How to: Send Data as a Stream : The Microsoft Drivers for PHP for SQL Server takes advantage of PHP streams for sending large objects to the server.

解決方案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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM