【发布时间】:2016-11-16 10:56:48
【问题描述】:
当我尝试使用多个 select 语句运行插入语句时,出现错误
Msg 512, Level 16, State 1, Line 3 子查询返回超过 1 个 价值。当子查询跟在 =、!=、、>= 之后或当子查询用作表达式时,这是不允许的。声明已终止。
我的查询
insert into zzz_fkp_tbl2 (fname,lname) values
(
(select top 20 percent [FNAME] from ZZZ_FKP_NEW_PATIENT order by newid())
,(select top 20 percent lname from ZZZ_FKP_NEW_PATIENT order by newid())
);
但是当我使用单个语句运行插入语句时,此查询运行成功,例如:
insert into zzz_fkp_tbl2 (lname)
select top 20 percent lname from ZZZ_FKP_NEW_PATIENT order by newid();
为什么我在使用多个 select 语句时收到错误 Subquery returned more than 1 value。但是插入语句与单个选择语句一起工作正常。在这种情况下如何使用多个选择语句?
我的要求是为 fname 和 lname 选择单独的随机行,但不能一起选择,即 fname 应该随机选择,lname 应该随机选择。
目标表
create table zzz_fkp_tbl2
(
zzz_fkp_tbl2_id int identity(1,1) not null
,name varchar(200)
,fname varchar(200)
,lname varchar(200)
,gender int
,address int
,age varchar(10)
);
【问题讨论】:
-
问题是每次您的子查询都会获取所有前 20 行值以插入到第一行的一个列中,这是错误的方法
-
您想将 fname/lname 对放在一起吗?
-
第一个是您刚刚发明的语法。在 TSQL 中,这个(第一个)代码意味着:两个标量值的元组,每个都由子查询选择。
-
感谢 cmets。我的要求是为 fname 和 lname 选择单独的随机行,而不是一起选择。
标签: sql sql-server