插入数据时列名无效

时间:2017-08-02 07:43:52

标签: sql sql-server ssms

我有一个SQLExpress的本地安装,并使用SQL Server Management Studio访问它。

我在SSMS中创建了一个新数据库BirdSite,其中包含一个表TMasterCountry,其中包含以下列:

Id (int)
CountryName (varchar(50))

其中Id是主要的自动递增键。

当我在对象资源管理器中使用Script table as...选项时,我可以使用以下SQL查看空表:

USE [BirdSite]
GO

SELECT [Id]
      ,[CountryName]
  FROM [dbo].[TMasterCountry]
GO

没有任何问题。

但是,使用相同的选项尝试插入一些数据,会显示此SQL:

USE [BirdSite]
GO

INSERT INTO [dbo].[TMasterCountry]
           ([CountryName])
     VALUES
           (<CountryName, varchar(50),>)
GO

所以我将VALUES下的行更改为

(CountryName, 'test')

但是当我尝试运行代码时,我得到了这些错误:

  

Msg 207,Level 16,State 1,Line 4

     

列名称无效&#39; CountryName&#39;。

     

Msg 110,Level 15,State 1,Line 4

     

INSERT语句中的列少于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配。

有谁知道这里会发生什么?该列显然确实存在,因为我可以SELECT数据就好了。

关于SO的一些类似问题,我尝试重新启动SSMS并尝试刷新本地智能感知缓存,但运气好的话。我也尝试用方括号括起CountryName,但结果相同。

3 个答案:

答案 0 :(得分:6)

将其更改为:

USE [BirdSite]
GO

INSERT INTO [dbo].[TMasterCountry]
           ([CountryName])
     VALUES
           ('test')
GO

<CountryName, varchar(50),>指的是列的名称及其数据类型。

答案 1 :(得分:5)

语法错误;应该是

INSERT INTO [dbo].[TMasterCountry]
           ([CountryName])
     VALUES
           ('test')

答案 2 :(得分:3)

您需要使用以下值替换<>之间的整个内容:

INSERT INTO [dbo].[TMasterCountry]
       ([CountryName])
VALUES
       ('test')