我正在尝试插入使用多个值创建的表中。它在第一个值行末尾的逗号附近的不正确语法上引发错误。
我找不到问题。我确实尝试过单独插入,它像魅力一样插入。现在,我怀疑由于声明的变量或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
','附近的语法不正确。
但是,在单独的插入中使用声明语句单独插入时没有错误。
答案 0 :(得分:0)
问题不在于数据,而在于您的列名和SQL语句。
在SQL Server中,有某些系统保留的作品,我们称之为关键字。通常,我们不接受将这些关键字用作列名,因为这可能会影响查询性能。列名
名称,用户和日期
是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());