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

Posted

技术标签:

【中文标题】尝试使用多个值插入 SQL Server 时出现不正确的语法错误【英文标题】:Incorrect syntax error when trying to insert into SQL Server using multiple values 【发布时间】:2019-01-03 03:30:01 【问题描述】:

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

我无法识别问题。我确实尝试单独插入,它像魅力一样插入。现在我怀疑由于声明的变量或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());

我收到此错误:

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

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

【问题讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:

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

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

姓名、用户和日期

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

方法#1

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

蓝色:数据类型 粉色:系统定义函数 灰色:关键字

请注意: 由于更改列名也会导致其他应用程序出现问题,并且您必须在所有这些区域中更改它如果您已经有一个稳定的系统,则这种方法不太受欢迎。但是,如果您刚刚处于开发的起步阶段,那么这将是解决未来问题的更好方法。

方法#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());

【讨论】:

感谢您的回复,很有见地。正如您所说的那样,在我的实际案例中只有一列是蓝色的,我使用了括号,仍然没有运气。当我插入单个时,我在所有行中都没有发现任何问题(很痛苦)。我不知道问题出在哪里。这篇文章中没有人相信我,我没有改变任何昏迷或任何东西,唯一的事情是分组插入说我在插入单个相同行时发布的错误没有任何问题。 感谢您的回复,很有见地。正如您所说的那样,在我的实际案例中只有一列是蓝色的,我使用了括号,仍然没有运气。当我插入单个时,我在所有行中都没有发现任何问题(很痛苦)。我不知道问题出在哪里。这篇文章中没有人相信我,我没有改变任何昏迷或任何东西,唯一的事情是分组插入说我在插入单个相同行时发布的错误没有任何问题。

以上是关于尝试使用多个值插入 SQL Server 时出现不正确的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试将数据插入多个表时出错 [C# Winform SQL Server] [关闭]

尝试将字符串插入 SQL Server 时出现问题

尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException

训练模型时出现不兼容行维度的值错误

使用 INSERT INTO (SQL Server 2005) 插入多个值

将 HTML 插入 SQL Server 时出现 SQL 异常