2012-03-06 91 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