sql-server - 子请求返回了几个值
问题描述
这是我的代码:
CREATE TABLE IF NOT EXISTS Artfacture
(
N int(6) unsigned NOT NULL,
Code varchar(50) NOT NULL,
Ht Numeric NOT NULL
)
INSERT INTO Artfacture (N, Code, Ht)
VALUES ('1', '1', '10'), ('1', '2', '20'),('1', '3', '30');
CREATE TABLE IF NOT EXISTS Facture
(
N int(6) unsigned NOT NULL,
Ht Numeric NOT NULL
)
INSERT INTO Facture (N, Ht)
VALUES ('1', '60');
CREATE TABLE IF NOT EXISTS Article
(
Code varchar(50) NOT NULL,
Famille varchar(50) NOT NULL
)
INSERT INTO Article (Code, Famille)
VALUES ('1', 'F1'), ('2', 'F2'), ('3', 'F3');
CREATE TABLE IF NOT EXISTS Farticle
(
Designation varchar(50) NOT NULL,
Compte varchar(50) NOT NULL
)
INSERT INTO Farticle (Designation, Compte)
VALUES ('F1', '700000'), ('F2', '710000'), ('F3', '720000');
CREATE TABLE IF NOT EXISTS Ecritures
(
Date Date,
Pièce varchar(50) NOt NULL,
Compte varchar(50) NOT NULL,
Aux varchar(50),
Libelle varchar(100) NOT NULL,
Débit numeric NOT NULL
Crédit numeric NOT NULL
)
我的请求是一个触发器,其中添加、更新或删除 table 中的一些新行Facture
,它必须添加、更新、删除Ecritures
具有相同行数的行Artfacture
CREATE TRIGGER [dbo].[tr_Facture]
ON [dbo].[Facture]
FOR INSERT, UPDATE, DELETE
AS
DECLARE @dat AS date,
@piece AS nvarchar(10),
@piece1 AS nvarchar(10),
@de money, @cr money,
@code AS nvarchar(255),
@compte AS nvarchar(50),
@Aux AS nvarchar(50),
@lib AS nvarchar(50),
@Famille AS nvarchar(255)
SET @de = 0
SET @Aux = ''
SET @piece = (SELECT [N] FROM inserted)
SET @piece1= (SELECT [N] FROM deleted)
SET @dat = (SELECT [Date] FROM [dbo].[Facture] WHERE [N] = @piece)
SET @lib = 'FACTURE DE VENTE - ' + (SELECT [Societe] FROM [dbo].[Facture] WHERE [N] = @piece)
SET @Compte = (SELECT F.CompteV FROM Artfacture AF
INNER JOIN Article A ON A.Code = AF.Code
INNER JOIN Farticle F ON F.Designation = A.Famille
WHERE N = @piece)
set @Cr = (select AF.Ht from Artfacture AF inner join Article A on A.Code = AF.Code where N = @piece)
begin
IF EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted )
insert into F_Ecritures (Date,Piece,Compte,Auxiliere,Libelle,Débit,Crédit)
select @dat,@piece,F.CompteV,@Aux,@lib,@de, AF.Ht
from Artfacture AF
inner join F_Article A on A.Code = AF.Code
inner join F_Farticle F on F.Designation = A.Famille
where N = @piece
group by F.CompteV, AF.Ht;
ELSE IF EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted)
update Ecritures set Date=@dat,Piece=@piece,Compte=@compte,Auxiliere=@Aux,Libelle=@lib,Débit=@de,Crédit=@cr where Piece=@piece and Compte=@Compte
ELSE IF NOT EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted)
DELETE FROM [dbo].[Ecritures] WHERE Piece = @piece1
end
问题是我收到一个错误,即子请求返回了几个值.....
谁能帮我?
解决方案
由于触发器在整个集合上运行,因此您需要像这样构造它。逻辑可能与您尝试做的不完全匹配,但您应该能够使用此模式获得想法。
update Ecritures set <column expressions>
from inserted
join ECritures on eCritures.Piece=inserted.N
insert ECritures(<column list>)
select <columnist>
from inserted
where not exists(select * from deleted where deleted.Piece=inserted.N)
delete eCritures
from eCritures
join deleted on eCritures.Piece=deleted.N
where not exists(select * from inserted where inserted.N=deleted.N)
推荐阅读
- python - 为什么我的 Numpy 掩码不适用于 OpenCV bitwiseAnd()?
- python - 如果列下该行中的任何单元格不是浮点数,如何删除数据框中的行?
- python - Flask 网页 - 需要显示用户列表并允许管理员选择多个条目
- sql - 使用 XML 数据对列进行 MSSQL 混淆
- laravel - 如何在 Laravel 中通过“ids”获取和分享不同网页的帖子?
- html - 无法获取褪色的浮动ui对话框;不显示在闪亮
- spring - 连接到 WebSocket 时 WebSocketClient 冻结(Spring WebFlux)
- kubernetes - 在工作节点(或)由于内存使用而挂起的节点中停止 Kubelet 服务使 MYSQL 无法在 Kubernetes 工作节点中正确终止
- spring - Spring Boot 找不到在外部目录中声明的属性文件
- java - IntelliJ Idea:关于 Java 11 上支持的注释处理器源版本“RELEASE_6”的 Maven 编译警告