2012-03-06 93 views
0

我試圖運行以下命令將大量銷售數據以文本文件的形式導入到數據庫中。當我運行下面的我得到的錯誤:「無效的對象名稱PetDatabase.Sales「無效的對象名稱'PetDatabase.Sales'

BULK INSERT PetDatabase.Sales 
FROM 'C:\Temp\P1.txt' 
WITH 
(
    FORMATFILE = 'C:\Temp\PetSales.Fmt' 
); 

任何人都可以看到最新造成我的問題,我有表的文件夾內,但是,當我試圖PetsDatabase? Tables.Sales它並沒有區別

+0

恩,是不是'BULK INSERT' SQL Server命令? – 2012-03-06 18:47:29

+0

看起來像MS SQL .. – Teja 2012-03-06 18:51:33

+0

@JoachimIsaksson是。 'BULK INSERT'是一個T-SQL語句,在MySQL中最相當的是'LOAD DATA INFILE'。 – 2012-03-06 18:53:17

回答

2

忽略這個答案時,問題被標記爲mysql它寫在這裏留下了答案,以保持評論

- 。

嘗試使用LOAD DATA INFILE代替。

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

+0

我現在得到錯誤:'INFILE'附近的語法不正確。我認爲這是因爲我在每一行都錯過了一個分號,但是我把它們都放進去了,並沒有什麼區別。請指教。 – Blob 2012-03-06 18:59:27

+0

@ user1091114 LOAD DATA INFILE的語法與'BULK INSERT'的語法不同。請在您的問題中發佈您的新SQL,並讓我們知道您正在運行的MySQL版本(您可以發出'STATUS;'命令來獲取服務器版本)。 – 2012-03-06 19:01:37

+0

在Visual Studio 2010中使用SQL,SQL 2008 – Blob 2012-03-06 19:12:18

0
  1. 確保PetDatabase.Sales存在於你的文本文件。

  2. 交換您正在使用的任何行和字段終結符分隔符。這裏我使用定界符從逗號分隔文件

    BULK INSERT PetDatabase FROM 'C:\ TEMP \ p1.txt' WITH ( FIELDTERMINATOR = '', ROWTERMINATOR = '\ n' ) GO - 檢查表格的內容。 SELECT * FROM PetDatabase GO - 使用表格清理數據庫。 SELECT * FROM PetDatabase GO

此外,請確保以下不適用於你:

如果SQL Server用戶在使用Windows身份驗證登錄,用戶只能讀取用戶帳戶可訪問的文件,獨立於SQL Server進程的安全配置文件。

當從一臺計算機使用sqlcmd或osql執行BULK INSERT語句,將數據插入另一臺計算機上的SQL Server,並在第三臺計算機上使用UNC路徑指定data_file時,可能會收到4861錯誤。

要解決此錯誤,請使用SQL Server身份驗證並指定使用SQL Server進程帳戶的安全配置文件的SQL Server登錄名,或配置Windows以啓用安全帳戶委派。

+0

它應該存在於我的文本文件中?我跟蹤了本網站上的信息,並沒有在文本文件中引用任何表格。 http://msdn.microsoft.com/en-us/library/ms191479.aspx – Blob 2012-03-06 21:03:46

+0

如果您有字段名稱,則平面文件中的第一行應包含字段名稱。 fieldname1,fieldname2,filedname3 – Patriotec 2012-03-06 21:09:44

+0

請你可以參考我的例子,因爲它沒有在MDSN網站上跟蹤到,並且有點困惑:@ – Blob 2012-03-06 21:12:07

0

PetDatabase是模式名稱還是數據庫名稱? 如果它是數據庫名稱,那麼如果您的模式名稱是dbo,則也包括模式名稱。

PetDatabase.dbo.Sales