簡體   English   中英

來自Azure存儲的Azure SQL批量插入

[英]Azure SQL Bulk Insert from Azure Storage

我試圖在Azure SQL中使用OPENRECORDSET命令測試批量插入,但沒有成功。

目標表...最終

CREATE TABLE [dbo].[BCPTestTable](
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [TextField] [varchar](500) NULL,
  [IntFIeld] [int] NULL,
  [DateField] [date] NULL,
  [DateTimeField] [datetime] NULL,
  [i18nTextField] [nvarchar](500) NULL,
  [BitField] [bit] NULL,
  [TInyIntField] [tinyint] NULL,
CONSTRAINT [PK_IX_BCPTestTable] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

資料檔案

1   Jason   5   3/1/2018    3/1/2018 09:30:00   Test    1   50
2   Cindy   10  3/2/2018    3/2/2018 10:30:00   Testing 0   50

格式化文件

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" xsi:type="CharFixed" LENGTH="12"/>
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="500" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharFixed" LENGTH="12"/>
    <FIELD ID="4" xsi:type="CharFixed" LENGTH="11"/>
    <FIELD ID="5" xsi:type="CharFixed" LENGTH="24"/>
    <FIELD ID="6" xsi:type="CharFixed" LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="7" xsi:type="CharFixed" LENGTH="1"/>
    <FIELD ID="8" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="5"/
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="Id" xsi:type="SQLINT"/>
    <COLUMN SOURCE="2" NAME="TextField" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="3" NAME="IntFIeld" xsi:type="SQLINT"/>
    <COLUMN SOURCE="4" NAME="DateField" xsi:type="SQLDATE"/>
    <COLUMN SOURCE="5" NAME="DateTimeField" xsi:type="SQLDATETIME"/>
    <COLUMN SOURCE="6" NAME="i18nTextField" xsi:type="SQLNVARCHAR"/>
    <COLUMN SOURCE="7" NAME="BitField" xsi:type="SQLBIT"/>
    <COLUMN SOURCE="8" NAME="TInyIntField" xsi:type="SQLTINYINT"/>
  </ROW>
</BCPFORMAT>

現在,我只是嘗試使用以下查詢選擇數據:

SELECT  ID,
        TextField,
        IntField,
        DateField,
        DateTimeField,
        i18nTextField,
        BitField,
        TInyIntField
FROM    OPENROWSET(
            BULK 'test\TestData.txt', 
            DATA_SOURCE = 'xyzstorage',
            FORMATFILE = 'test\BCPTestTableFormat.txt', 
            FORMATFILE_DATA_SOURCE = 'xyzstorage'
        ) as Data

在此之前,我確實創建了一個數據庫范圍的憑證以及一個似乎有效的外部數據源。

當我運行上述SQL時,出現以下錯誤:

消息4862,級別16,狀態1,行1無法批量加載,因為文件“ test \\ BCPTestTableFormat.txt”不完整或無法讀取。 操作系統錯誤代碼38(到達文件末尾。)。

我嘗試使用XML版本和原始版本來格式化文件,這兩個文件都是使用最新(v14)BCP命令生成的。 在兩種情況下,我都會遇到相同的錯誤。

我嘗試過的隨機內容:

  1. 更改文件擴展名(笨拙但值得一試)
  2. 確保格式文件的兩個版本末尾都有空白行。
  3. 更改了斜線的方向(反之則找不到文件)

請幫忙!

最有可能是在xml文件中添加了字符,例如空格或行等。可以使用記事本++或代碼編輯器,編輯sql / xml文件,然后保存並重試嗎? 這可能會解決您的問題。 這是類似的錯誤消息和類似的解決方法: https : //www.sqlservercentral.com/Forums/Topic1490738-3077-1.aspx

根據您發布的信息,第11行缺少一個閉合的尖括號:

 <?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RECORD> <FIELD ID="1" xsi:type="CharFixed" LENGTH="12"/> <FIELD ID="2" xsi:type="CharFixed" LENGTH="500" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> <FIELD ID="3" xsi:type="CharFixed" LENGTH="12"/> <FIELD ID="4" xsi:type="CharFixed" LENGTH="11"/> <FIELD ID="5" xsi:type="CharFixed" LENGTH="24"/> <FIELD ID="6" xsi:type="CharFixed" LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> <FIELD ID="7" xsi:type="CharFixed" LENGTH="1"/> <FIELD ID="8" xsi:type="CharTerm" TERMINATOR="\\r\\n" MAX_LENGTH="5"/ </RECORD> 

在此處輸入圖片說明

暫無
暫無

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

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