尝试使用多个值插入SQL Server时出现不正确的语法错误

时间:2019-01-03 03:30:02

标签: sql sql-server insert

我正在尝试插入使用多个值创建的表中。它在第一个值行末尾的逗号附近的不正确语法上引发错误。

我找不到问题。我确实尝试过单独插入,它像魅力一样插入。现在,我怀疑由于声明的变量或GETDATE或两者都导致多行插入有问题?无法举行会议吗?我试图进行像begin tran和commit tran这样的事务,仍然没有运气。我有很多行,有什么建议吗?

DECLARE @USER VARCHAR(40)
SET @USER = SYSTEM_USER

INSERT INTO MyTable (Id, Name, User, Date)
VALUES (1, 'Cris', @USER, GETDATE()),
       (2, 'Joel', @USER, GETDATE()),
       (3, 'Kris', @USER, GETDATE());

我收到此错误:

  

第15级州立1行18的消息102
  ','附近的语法不正确。

但是,在单独的插入中使用声明语句单独插入时没有错误。

1 个答案:

答案 0 :(得分:0)

问题不在于数据,而在于您的列名和SQL语句。

在SQL Server中,有某些系统保留的作品,我们称之为关键字。通常,我们不接受将这些关键字用作列名,因为这可能会影响查询性能。列名

  

名称,用户和日期

是SQL Server中的关键字或数据类型,因此在编译语句时,会使编译器感到困惑。因此,您可以使用以下两种方法之一解决此问题:

方法#1

更改与关键字具有相同名称的列名称。您可以通过在SQL Server Management Studio中键入列名称来轻松识别此列,并且如果文本颜色更改为模糊,粉红色或灰色(SSMS中的默认颜色设置),则这些是一些系统定义的关键字

  • 蓝色:数据类型
  • Pink:系统定义的功能
  • 灰色:关键字

请注意: 由于更改列名也会导致其他应用程序出现问题,因此您必须在所有这些区域中进行更改。如果您已经拥有稳定的系统,则不建议使用此方法。但是,如果您只是处于开发的开始阶段,那么这将是解决未来问题的更好方法。

方法#2

这是最简单的想法,在使用上面列出的任何系统保留关键字的所有地方,将它们放在方括号中,即可解决此问题。这是解决问题的最快方法

您更新后的代码应如下所示:

DECLARE @USER VARCHAR(40)
SET @USER = SYSTEM_USER

INSERT INTO MyTable (Id, [Name], [User], [Date])
VALUES (1, 'Cris', @USER, GETDATE()),
       (2, 'Joel', @USER, GETDATE()),
       (3, 'Kris', @USER, GETDATE());