从csv问题填充SQL Server

时间:2016-08-30 19:01:49

标签: sql-server csv sql-server-data-tools

我正在使用ASP.NET MVC 5创建一个网站,现在我需要创建一个数据库。我正在使用Visual Studio 2015并创建了一个新的数据库项目。该数据库是SQL Server 2016平台。我试图从.csv文件中获取数据并将其放入数据库,但我的SQL文件中出现了一些错误。

CREATE TABLE [dbo].[TestTable]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [FirstName] NVARCHAR(50) NULL, 
    [LastName] NVARCHAR(50) NULL, 
    [BirthDate] SMALLDATETIME NULL
)
GO

BULK INSERT TestTable
FROM 'C:\Users\ajs2987\Documents\projects\TestData.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
GO

-- Check the content of the table
SELECT *
FROM TestTable

我收到的错误是BULKSELECT声明:

  

SQL700001:在此上下文中无法识别此语句。

我还在屏幕上附上了错误图片:

DBERROR

任何帮助将不胜感激,如果我能提供更多细节,请告诉我。

谢谢!

3 个答案:

答案 0 :(得分:0)

检查脚本的属性。如果构建操作设置为“构建”,它将尝试将代码作为数据定义语言运行,但您的脚本包含将数据插入表中的语言。您需要将其设置为“无”。

答案 1 :(得分:0)

我尝试下面的脚本,作为一个例子,它对我来说很好。

CREATE TABLE [dbo].[STAGING]
 (
        [Date]    VARCHAR(MAX),
        Type    VARCHAR(MAX),
        Change  VARCHAR(MAX),
        SP_ID   VARCHAR(MAX),
        Sedol   VARCHAR(MAX),
        Cusip   VARCHAR(MAX)
)
  bulk insert dbo.STAGING
  from 'C:\Documents and Settings\Desktop\YOUR_DATA.txt'
  WITH
  (
  FIRSTROW = 2,
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = '\n'
  )
  GO
  INSERT INTO dbo.FINAL
    SELECT
        [Date] = CASE WHEN ISDATE([Date])=1 THEN CAST([Date] AS DATETIME) ELSE NULL END,
        Type,
        Change,
        SP_ID,
        Sedol,
        Cusip
    FROM [dbo].[STAGING]

确保您的文件以逗号分隔...我认为是。此外,请确保文件开头或文件末尾没有特殊字符。查看Notepad ++只是为了确保。有时,当您查看CSV时,您无法看到这些特殊字符。 :)

答案 2 :(得分:-1)

您正在将数据库定义与数据修改语句混合在一起,这是一个很大的禁忌。您需要将BULK INSERT和SELECT语句移动到一个单独的文件中,该文件不是"内置的"与您的数据库。

然后,您可以将所述文件作为部署后脚本引用(或者只是手动运行它)。

参见"部署前和部署脚本"以https://www.infoq.com/articles/SSDT-Intro为例。