无法确定用于插入值的 SQL Server 语法

Posted

技术标签:

【中文标题】无法确定用于插入值的 SQL Server 语法【英文标题】:Can't figure out SQL Server Syntax for inserting values 【发布时间】:2014-11-03 22:33:05 【问题描述】:

编辑:我可能发现了问题。我说我使用的是 SQL-Server 2012 是错误的。那是我安装的 SSMS 的版本,但显然 SQL-Server DB 的版本是 2005(SQL Server 9.0.5000),我在来自here的查找表。

我显然不明白这一切是如何运作的。谢谢大家,很抱歉给您带来麻烦。

原帖:

我正在尝试完成一些非常简单的事情,并且我在网上看到的所有地方都会给我返回错误并且不会执行的语法。

这段代码执行:

declare @tester table (col1 varchar(max))

insert into @tester (col1) values ('abc')

select * from @tester

但由于某种原因,当我向值部分添加更多内容时,我得到“',' 附近的语法不正确。”

declare @tester table (col1 varchar(max))

insert into @tester (col1) values ('abc'), ('dcef')

select * from @tester

我正在尝试使用的一个在线资源是这个答案: Inserting multiple rows into a SQL Server table using a table variable

此修改有效,但我不知道为什么我无法弄清楚我的语法仅用于值列表。

declare @tester table (col1 varchar(max))

insert into @tester (col1) values ('abc')
insert into @tester (col1) values ('dcef')

select * from @tester

【问题讨论】:

谢谢!是的,我收到以下错误。 “INSERT 语句中的列数少于 VALUES 子句中指定的值。VALUES 子句中的值数必须与 INSERT 语句中指定的列数相匹配。” 实际上你的第二个代码块“插入@tester(col1)值('abc'),('dcef')”对我来说是成功的。我正在使用 SQL 2008 R2。 @DBNull,谢谢。我正在使用 SQL Server 2012 Service Pack 2。 如果您运行它的服务器是 SQL 2008 或更高版本,则此代码应该可以正常工作,因为它没有任何问题。 嗨。我想我找到了问题所在。我正在运行的数据库版本是 2005 年。我并没有真正完全了解该信息的保存位置,但我终于找到了。谢谢你告诉我去寻找它,@jpw。 【参考方案1】:

您必须使用select 插入许多记录,并使用union all 将它们放在文字列表中,而不是从另一个表中选择。

这是一个例子:

declare @tester table (col1 varchar(max));

insert into @tester (col1) 
   Select 'abc' union all
           'dcef' union all
           'ghi';

select * from @tester;

分号分隔符是可选的。

【讨论】:

union all 表示插入所有值,即使某些记录是重复的。如果您只留下union,并尝试插入两条以abc 作为数据的记录,您将只得到一条记录(union 删除重复项,而union all 命令允许重复项)。

以上是关于无法确定用于插入值的 SQL Server 语法的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis +sql server 插人中文乱码

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

mysql 无数据插入,有数据更新

mysql 无数据插入,有数据更新

无法从 Windows 窗体将数据插入 SQL Server

插入行时出现标识值的 SQL Server 错误