2017-06-14 70 views
3

我想將一個csv文件(sqlserver-dba-csv.txt)導入Azure中託管的SQL Server數據庫的表中。Azure將csv文件從Azure文件服務位置導入Azure SQL Server

此文件位於Azure文件服務(位置地址:'https://XXXXXXXXXXX.file.core.windows.net/XXXXXXXXXXX/sqlserver-dba-csv.txt'),這也是我的本地計算機上映射的驅動器。

最終我希望通過觸發器實現某種程度的自動化,但現在我只想將數據導入到SQL服務器上的一個表中以證明該過程正常。

這SQLSERVER-DBA-csv.txt文件的內容是:

1,James Brown,blue 
2,Prince,red 
3,Rick James,yellow 

我使用SSMS的代碼是:

**--create a table 
CREATE TABLE musicians_csv (
musician_id INT, 
full_name VARCHAR(50), 
colour VARCHAR(20) 
) 
GO 
--bulk insert csv into a SQL Server table 
BULK 
INSERT musicians_csv 
FROM 'https://XXXXXXXXXXX.file.core.windows.net/XXXXXXXXXXX/sqlserver-dba-csv.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Verify data inserted 
SELECT * 
FROM musicians_csv 
GO 
--Drop the table 
DROP TABLE musicians_csv 
GO** 

我收到的錯誤消息是:

Msg 4861,Level 16,State 1,Line 10無法批量加載,因爲文件 「https:/xxxxxxxxx.file.core.windows.net/xxxxxxxxx /sqlserver-dba-csv.txt「 無法打開。操作系統錯誤代碼(空)。

(0行(S)的影響)

我懷疑文件位置的格式不正確,但一直沒能搜索後找到任何解決方案。

另外 - 我能夠引用和導入我的本地計算機上的文件,即使我的SQL Server位於Azure雲中 - 例如位置:「C:\ Users \ user.name \ Desktop \ SQLSERVER-DBA-csv.txt」

任何幫助,不勝感激

+0

退房這個答案,但我在這裏使用的blob:HTTPS://stackoverflow.com/questions/44116289/migrating-to-azure-sql-bcp/44116380#44116380 – TheGameiswar

+0

https://開頭的文檔。微軟。com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql – david25272

回答

0

此鏈接可以幫助你: https://azure.microsoft.com/en-us/updates/preview-loading-files-from-azure-blob-storage-into-sql-database/

你需要創建一個數據源的外部(與共享訪問簽名,如果你的斑點存儲,不公開)。

+0

嗨,歡迎來到Stack Overflow。一般來說,只有鏈接的答案是不被接受的,因爲他們沒有提供上下文來解決大多數問題。請閱讀https://stackoverflow.com/help/how-to-answer瞭解更多關於編寫更好答案的信息。 – SandPiper

+0

感謝這是有幫助的 - 我想看看我是否可以使用Azure文件服務而不是Azure blob存儲在Azure SQL服務器上創建外部數據源,因爲它很容易將azure文件存儲映射到本地計算機並觸發導入。我發現你不能將一個天藍色的blob存儲映射到本地的Windows機器上,所以我將不得不弄清楚如何用blob存儲完成這項工作。 –

1

您可能正面臨一個安全問題:如果該文件尚未被公開訪問,則Azure SQL可能無法訪問您要導入的文件。

當然也許你並不想設置的文件提供給大家,所以你必須存儲憑證通過建立認證命令來訪問它到Azure的SQL:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'A-$tr0ng|PaSSw0Rd!'; 
GO 

CREATE DATABASE SCOPED CREDENTIAL [CSV-Storage-Credentials] 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', 
SECRET = '<shared-access-signature for "csvimportdemo" blob storage here>'; 
GO 

CREATE EXTERNAL DATA SOURCE [CSV-Storage] 
WITH 
( 
    TYPE = BLOB_STORAGE, 
    LOCATION = 'https://csvimportdemo.blob.core.windows.net', 
    CREDENTIAL= [CSV-Storage-Credentials] 
); 

這一次做,那麼你可以通過批量命令訪問文件:

SELECT 
    FileId = ' + CAST(@fid AS NVARCHAR(9)) + ', 
    FirstName, 
    LastName, 
    TwitterHandle 
FROM OPENROWSET(
    BULK '<your file here>', 
    DATA_SOURCE = 'CSV-Storage', 
    FIRSTROW=2, 
    FORMATFILE='<your format file here>', 
    FORMATFILE_DATA_SOURCE = 'Storage') as t 

,你可以找到在github上一個完整的工作示例(從那裏我張貼的示例代碼取自),它可以自動進口也使用Azure的功能:

https://github.com/yorek/AzureFunctionUploadToSQL/blob/master/SQL/create-objects.sql