2017-05-19 12 views
0

私はそれらを解凍してブロブとして追加する複数のBCPファイルを含むzipファイルを取得するAzure関数を持っています。AzureデータベースでBCPファイルをインポートする

ここで、BCPファイルをSQLデータベースにインポートしますが、その方法についてはわかりません。

BULK INSERT RegPlusExtract.dbo.extract_class 
FROM 'D:\local\data\extract_class.bsp' 
WITH (FIELDTERMINATOR = '@**@',ROWTERMINATOR = '*@@*') 

しかし、SQLサーバがローカル関数のDへのアクセスがないと、これは明らかに動作しません:ドライブを私は次のスクリプトを使用して、SqlCommandオブジェクトを実行することができます知っています。

データを読み込むにはどうすればよいですか? BCPファイルをメモリにロードしてSQLCommandを渡すことは可能ですか?または、ファイルをSQLサーバーに直接渡すことはできますか?

バックアップ/リストアのために私はFROM URL = ''を行うことができます。私は一括挿入のためにこれを使用することができたら、私はちょうどblobのURLを参照することができますが、私はできるように見えない?

答えて

1

あなたは手順があるBLOBのstorage..belowを使用する必要があります、これらは外部データソース

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage 
WITH ( TYPE = BLOB_STORAGE, 
     LOCATION = 'https://sqlchoice.blob.core.windows.net/sqlchoice/samples/load-from-azure-blob-storage', 
--  CREDENTIAL= MyAzureBlobStorageCredential --> CREDENTIAL is not required if a blob storage is public! 
); 

あなたはまた、コンテナにファイルをアップロードすることができます--createここMicrosoft/sql-server-samples

を文書化していますbelow.Hereのweek3がコンテナ

CREATE EXTERNAL DATA SOURCE MyAzureInvoicesContainer 
    WITH (
     TYPE = BLOB_STORAGE, 
     LOCATION = 'https://newinvoices.blob.core.windows.net/week3', 
     CREDENTIAL = UploadInvoices 
    ); 

今、あなたのような

の下OpenRowsetをしてBulkInsertを使用することができているようにそれを参照します
-- 2.1. INSERT CSV file into Product table 
BULK INSERT Product 
FROM 'product.csv' 
WITH ( DATA_SOURCE = 'MyAzureBlobStorage', 
     FORMAT='CSV', CODEPAGE = 65001, --UTF-8 encoding 
     FIRSTROW=2, 
     TABLOCK); 

-- 2.2. INSERT file exported using bcp.exe into Product table 
BULK INSERT Product 
FROM 'product.bcp' 
WITH ( DATA_SOURCE = 'MyAzureBlobStorage', 
     FORMATFILE='product.fmt', 
     FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage', 
     TABLOCK); 

-- 2.3. Read rows from product.dat file using format file and insert it into Product table 
INSERT INTO Product WITH (TABLOCK) (Name, Color, Price, Size, Quantity, Data, Tags) 
SELECT Name, Color, Price, Size, Quantity, Data, Tags 
FROM OPENROWSET(BULK 'product.bcp', 
       DATA_SOURCE = 'MyAzureBlobStorage', 
       FORMATFILE='product.fmt', 
       FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage') as products; 

-- 2.4. Query remote file 
SELECT Color, count(*) 
FROM OPENROWSET(BULK 'product.bcp', 
       DATA_SOURCE = 'MyAzureBlobStorage', 
       FORMATFILE='data/product.fmt', 
       FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage') as data 
GROUP BY Color; 
+1

私はちょうどそのリンクを見つけました!それが私が必要とするものです。データを渡すのではなく、URLをSQL Serverに渡すほうが簡単です – ADringer

関連する問題