我需要你的帮助!
我正在使用sql server 1--我创建了这个触发器,但似乎是错误的......
CREATE TRIGGER [dbo].[chargeAZero]
ON [dbo].[situations_final]
after INSERT
AS
BEGIN
SET nocount ON
UPDATE sfinal
SET charge = 00
FROM inserted i
INNER JOIN situations_final sfinal
ON i.referencepiece = sfinal.referencepiece
AND i.ancienposte = sfinal.ancienposte
AND i.numerophase = sfinal.numerophase
AND i.datestrategie = sfinal.datestrategie
/*and i.Datecadence=sfinal.Datecadence*/
WHERE (SELECT sfinal.nouveauposte
FROM situations_final sfinal
INNER JOIN inserted i
ON i.referencepiece = sfinal.referencepiece
AND i.ancienposte = sfinal.ancienposte
AND i.numerophase = sfinal.numerophase
AND i.datestrategie = sfinal.datestrategie) IS
NULL
END
错误消息总是一样的:子查询返回了多个值...我认为我正确地编写了我的触发器,就像其他工作正常一样。
2--我的第二个问题是:是否有可能只递归一个触发器?
3--正如你在我的数据库中注意到的“Nomenclatures”(英文的材料清单)我有3个要素: * codepiecemere:组件母亲 * codepiecefille:组件子 * 数量。 我举一个例子说明我需要的东西: 母亲=孩子= B数量= 2 母亲= B孩子= C数量= 3
我想要一个触发器给我一个这样的结果: A 1 B 2 C 6 = 2 * 3(产生1B的C所需的量)。
非常感谢
答案 0 :(得分:1)
is null
通常不与子查询一起使用。试试这个:
where not exists (select 1
from SITUATIONS_Final sfinal inner join inserted i
on i.ReferencePiece=sfinal.ReferencePiece
and i.AncienPoste=sfinal.AncienPoste
and i.numerophase=sfinal.numerophase
and i.datestrategie=sfinal.datestrategie
)
这假设is null
正在测试没有返回值,而NULL
中的sfinal.nouveauposte
值正在测试。如果是后者:
where exists (select 1
from SITUATIONS_Final sfinal inner join inserted i
on i.ReferencePiece=sfinal.ReferencePiece
and i.AncienPoste=sfinal.AncienPoste
and i.numerophase=sfinal.numerophase
and i.datestrategie=sfinal.datestrategie
where sfinal.nouveauposte is null
)
编辑:
你需要子查询吗?
UPDATE sfinal
SET charge = 00
FROM inserted i
INNER JOIN situations_final sfinal
ON i.referencepiece = sfinal.referencepiece
AND i.ancienposte = sfinal.ancienposte
AND i.numerophase = sfinal.numerophase
AND i.datestrategie = sfinal.datestrategie
WHERE sfinal.nouveauposte IS NULL;
答案 1 :(得分:1)
这是一个解决材料聚合问题的递归查询。
表格定义
CREATE TABLE [dbo].[Material](
[Mother] [varchar](100) NOT NULL,
[Child] [varchar](100) NOT NULL,
[Quantity] [int] NOT NULL,
)
和查询:
WITH Result(mother, child, quantity)
AS
(
select * from material
union all
select M.mother, R.Child, M.quantity * R.Quantity as Quantity
from Result R INNER JOIN Material M ON M.Child = R.Mother
)
select * from result
您可以在此处查看示例:http://sqlfiddle.com/#!6/6dc64/1
<强>更新强>
Sql小提琴不起作用,我不知道为什么
更新2
Sql Fiddle回来了! : - )
答案 2 :(得分:0)
我认为问题是您在一个命令中插入了多行,因此插入的表包含多行。因此,子查询
SELECT sfinal.nouveauposte
FROM situations_final sfinal
INNER JOIN inserted i
ON i.referencepiece = sfinal.referencepiece
AND i.ancienposte = sfinal.ancienposte
AND i.numerophase = sfinal.numerophase
AND i.datestrategie = sfinal.datestrategie
也包含多个行,无法与标量值的NULL进行比较。
答案 3 :(得分:0)
我雄心勃勃:D我试图改进剧本:
WITH RESULT (MOTHER, CHILD, QUANTITY)
as
(
select Mother, Child, CONVERT(Numeric(10,0), Quantity) as Quantity from bilangammestest
union all select M.mother, R.Child, CONVERT(Numeric(10,0), M.quantity * R.Quantity) as Quantity from Result R
INNER JOIN bilangammestest M ON M.Child = R.Mother
)
select * from result
where mother not in (select child from bilangammestest )
以下是我在桌子上的数据&#34; Bilangammestest&#34;:
Z A 1
Z Y 1
A B 2
Y B 2
B C 3
以下是我得到的结果:
Z A 1
Z Y 1
Z C 6
Z C 6
Z B 2
Z B 2
这是我想要的最终结果:
Z A 1
Z Y 1
Z C 12
Z B 4
我试着做一笔&#39;总结&#39;但我无法正确地做到:(