① sql 触发器 子查询返回的不止一个值
当然有问题,你设的参数只能取到一个值,所以如果你插入一行就没有问题,超过一行就不对。
ALTER TRIGGER 班级表人数添加
ON dbo.学生信息表
FOR insert
AS
begin
update a set a.人数=b.人数
from 班级表 a,(select 班级编号,count(*) 人数 from inserted group by 班级编号) b
where a.班级编号=b.班级编号
end
② sql 问题子查询返回的值不止一个。
解决方法如下:
返回一个值:返回多个说明数据库中满足用户查询条件的记录有多个,要返回一个就说明用户的查询条件不够,再加条件控制就行了,比如在语句末尾再加 and ***=‘***’;
如果用户问的是如何在后台程序中接收的话,用List可以,一个节点接收Result的一行值,读取的时候遍历List就行了。
(2)sql子程序返回值不止一个扩展阅读:
删除表
drop table tabname--这是将表连同表中信息一起删除但是日志文件中会有记录
删除信息
delete from table_name-这是将表中信息删除但是会保留这个表
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1[separator]
③ SQL SERVER 子查询返回的值不止一个。
IF((SELECT top 1 shippedDate FROM inserted) > RequiredDate))
④ SQL问题,子查询返回的值不止一个!
执行后报下面的错误,是哪里出错了?帮看下,谢谢.
"消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
"
⑤ sql server触发器 子查询返回值不止一个 如何解决
你说的是
SELECT ...... FROM inserted; 返回多行的情况么?
--假设这个A是主表
CREATE TABLE A(
AID INT IDENTITY(1, 1) PRIMARY KEY,
money INT
);
-- 假设这个B是 日志表, 负责记录 A表 发生的变化。
CREATE TABLE B(
BID INT IDENTITY(1, 1) PRIMARY KEY,
AID INT,
money INT
);
go
-- 假设这个C也是日志表, 负责记录 A表 发生的变化。
-- 但是这个C表是用于演示 不正确使用的例子。
CREATE TABLE C(
CID INT IDENTITY(1, 1) PRIMARY KEY,
AID INT,
money INT
);
go
-- 测试的存储过程
-- 当 A 表 插入 / 更新 / 删除的时候i, 都触发。
CREATE TRIGGER AfterA
ON A
FOR INSERT,UPDATE,DELETE
AS
DECLARE @aid INT, @money INT;
BEGIN
IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
BEGIN
-- 插入触发.
-- 正确的使用.
INSERT INTO B
SELECT
inserted.aid,
inserted.money
FROM
inserted;
-- 不正确的使用.
SELECT @aid = aid, @money = money FROM inserted;
INSERT INTO C VALUES ( @aid, @money);
END;
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
BEGIN
-- 更新触发.
-- 正确的使用.
INSERT INTO B
SELECT
inserted.aid,
inserted.money - deleted.money
FROM
inserted, deleted
WHERE
inserted.AID = deleted.AID;
-- 不正确的使用.
SELECT @aid = aid, @money = money FROM inserted;
SELECT @money = @money - money FROM deleted;
INSERT INTO C VALUES ( @aid, @money);
END;
IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
BEGIN
-- 删除触发
-- 正确的使用.
INSERT INTO B
SELECT
deleted.aid,
0 - deleted.money
FROM
deleted;
-- 不正确的使用.
SELECT @aid = aid, @money = 0 - money FROM deleted;
INSERT INTO C VALUES ( @aid, @money);
END;
END;
go
-- 一条SQL语句,插入一条数据
INSERT INTO A VALUES (100);
-- 一条SQL语句,插入多条数据
INSERT INTO A
SELECT 10
UNION ALL SELECT 20;
GO
-- 一条SQL语句,更新一条数据
UPDATE A SET money = money - 50 WHERE AID = 1;
-- 一条SQL语句,更新多条数据
UPDATE A SET money = money + 50 WHERE AID != 1;
GO
-- 一条SQL语句,删除一条数据
DELETE FROM A WHERE AID = 1;
-- 一条SQL语句,删除多条数据
DELETE FROM A WHERE AID != 1;
GO
SELECT * FROM B
GO
BID AID money
----------- ----------- -----------
1 1 100
2 3 20
3 2 10
4 1 -50
5 3 50
6 2 50
7 1 -50
8 3 -70
9 2 -60
(9 行受影响)
SELECT * FROM C
go
CID AID money
----------- ----------- -----------
1 1 100
2 2 10
3 1 -50
4 2 30
5 1 -50
6 2 -60
(6 行受影响)
这里, AID = 3 的数据,没有被触发器处理。
⑥ sql 删除 子查询返回的值不止一个
能给更多的信息吗,单从sql看是没有问题的,可以执行啊
⑦ sql 子查询返回的值不止一个怎么解决
问题就出在你这句:
(select@moneyfromMoney)
这句的查询结果是money表里有多少条记录,就有多少个结果,你就直接:
updateMoneysetmoney=money+@moneywhereSname=@Sname
是这个意思吗?
⑧ SQL语句,子查询返回的值不止一个。
select * from flight_now
where 机号 in (select jh from jh where flight_now.机号 != jh.jh)
这样就可以了
⑨ 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,关于触发器SQL语句
update 学生信息 set 就业标志='就业' where 学号 = (select 学号 from 就业信息 where 学号=@xuehao ) --感觉应该是这个里面出问题
为什么不直接
update 学生信息 set 就业标志='就业' where 学号 =@xuehao
⑩ sql 子查询 子查询返回的值不止一个。这种情况是不允许的。 请问如何解决
可以用 in 或not in 来查询格式select * from xx where 字段 in(select (只能一个)字段 from x x where 字段<=xx)