当您将多个记录包装在VALUES子句的括号中时,SQL是否将它们视为一个记录?

当您将多个记录包装在VALUES子句的括号中时,SQL是否将它们视为一个记录?,sql,sql-server,Sql,Sql Server,我最近正在研究一个存储过程,它将多条记录插入到一个表变量中,并遇到了一个看似奇怪的问题,但现在我意识到,我可能只是因为忽略了显而易见的问题而把自己弄糊涂了。无论如何,将表变量定义视为: DECLARE @TableVariable TABLE(ID INT NOT NULL PRIMARY KEY IDENTITY(1, 1), SomeValue NVARCHAR(1000)); 当我执行以下insert语句时,它成功了,没有问题: INSERT INTO @TableVariable (S

我最近正在研究一个存储过程,它将多条记录插入到一个表变量中,并遇到了一个看似奇怪的问题,但现在我意识到,我可能只是因为忽略了显而易见的问题而把自己弄糊涂了。无论如何,将表变量定义视为:

DECLARE @TableVariable TABLE(ID INT NOT NULL PRIMARY KEY IDENTITY(1, 1), SomeValue NVARCHAR(1000));
当我执行以下insert语句时,它成功了,没有问题:

INSERT INTO @TableVariable (SomeValue) VALUES
    ('Value 1'), ('Value 2')
然而,当我回来清理查询时,我在
VALUES
子句中添加了括号,以便在不添加注释的情况下显示它的结束位置(不知道为什么,可能是C习惯于将
区域
标记括起来):

这产生了一个错误,指出
INSERT
中的列少于
VALUES
子句中的列:

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

我的理论是,它将带括号的版本视为试图插入一个值,多个列,因为我将所有条目都包装在括号中



我的问题是,为什么这在官方意义上会有所不同?

语法很简单<代码>值后面是一行的值列表。每一行都在它自己的括号内

因此:

是两行一列

values ( (1) ), ( (2) ) 
是两行一列——事实上与上面相同

但是:


要么是错误。或者,在支持元组的数据库中,一行一列的值为
(1,2)

用您正在使用的数据库标记您的问题。-这应该有助于形象化这个想法。我认为这可能是事实,但我想从一个对SQL有更多经验的人那里100%确定。谢谢我会尽快接受的,所以我会同意的。
values (1), (2)
values ( (1) ), ( (2) ) 
values ( (1, 2) )