Avatar billede boeck Nybegynder
03. august 2004 - 09:31 Der er 9 kommentarer og
1 løsning

Triger som ikke genkender felt??

Hej,
Jeg har følgende trigger i en MS SQL 2000 server.

CREATE TRIGGER [valdt] ON [dbo].[WaVo]

FOR INSERT, UPDATE

AS

DECLARE @bnd integer

SELECT @bnd

IF [WaBnd.SrcTp]= 1

BEGIN

update WaVo set valdt = vodt

END
Som giver følgende besked retur, når jeg kører den i Query Analyzer:

"nvalid column name 'WaBnd.SrcTp'"

Både feltet og tabellen eksistere. Ved I om der er andre ting som gør at feltet ikke vil genkendes?
Avatar billede fsconsult.dk Nybegynder
03. august 2004 - 10:03 #1
hvad forsøger du at gøre med [WaBnd.SrcTp] ? 

er WaBnd en tabel og SrcTp et felt i tabellen?  Forsøger du at lave en select på WaBnd tabellen?  (din trigger gælder jo ikke WaBnd men Wavo)
Avatar billede boeck Nybegynder
03. august 2004 - 11:43 #2
Wabnd er en tabel og SrcTP er feltet.
Jeg vil gerne lave en select på WaBnd tabellen på feltet Srctp.
Hvordan laver jeg den så?
Avatar billede fsconsult.dk Nybegynder
03. august 2004 - 11:54 #3
noget i retning af:

CREATE TRIGGER [valdt] ON [dbo].[WaVo]
FOR INSERT, UPDATE
AS

DECLARE @srcTpVar integer
SELECT @srcTpVar = SrcTp FROM WaBnd

IF @srcTpVar = 1
BEGIN
  update WaVo set valdt = vodt
END


er der kun en row i WaBnd?  (eller skal der tilføjes et WHERE)
Avatar billede boeck Nybegynder
03. august 2004 - 12:21 #4
Ja, der er flere rækker i Wabnd.
Den returerne fejlen.
"subquery returned more than 1 value". Er det i den forbindelse?
Avatar billede fsconsult.dk Nybegynder
03. august 2004 - 12:24 #5
jeps ... der må være en bestemt række du ønsker at teste på. et nøglefelt fra Wavo måske?
Avatar billede boeck Nybegynder
03. august 2004 - 15:11 #6
ja, der findes et felt i både wavo og wabnd som hedder bndno. Hvordan bliver min trigger så? Det er vil noget med

CREATE TRIGGER [valdt] ON [dbo].[WaVo]
FOR INSERT, UPDATE
AS

DECLARE @srcTpVar integer
SELECT @srcTpVar = SrcTp FROM WaBnd

IF @srcTpVar = 1
BEGIN
  update WaVo set valdt = vodt
  where wavo.bndno=wabnd.bndno
END

??
Avatar billede fsconsult.dk Nybegynder
03. august 2004 - 15:49 #7
CREATE TRIGGER [valdt] ON [dbo].[WaVo]
FOR INSERT, UPDATE
AS

DECLARE @srcTpVar integer
SELECT @srcTpVar = SrcTp
  FROM WaBnd
  WHERE WaBnd.bndno = inserted.bndno

IF @srcTpVar = 1
BEGIN
  update WaVo set valdt = vodt
    where bndno = inserted.bndno
END
Avatar billede boeck Nybegynder
04. august 2004 - 11:52 #8
Hej igen,
Den returerne følgende fejl:

"Server: Msg 107, Level 16, State 2, Procedure valdt, Line 6
The column prefix 'inserted' does not match with a table name or alias name used in the query.
Server: Msg 107, Level 16, State 1, Procedure valdt, Line 12
The column prefix 'inserted' does not match with a table name or alias name used in the query."

Den er åbenbart ikke helt tilfreds med "inserted"?? Beklager hvis jeg lidt uvidende, men jeg er rimelig grøn i SQL :)
Avatar billede t1201 Nybegynder
14. august 2004 - 15:47 #9
Hej,
Det du har gang i vil fejle hvis der indsættes / opdateres flere rækker i WaVo i én kommando. Du skal så vidt muligt bruge Update direkte i triggere.

Prøv

CREATE TRIGGER [valdt] ON [dbo].[WaVo] FOR INSERT, UPDATE
AS

Update WaVo
set valdt = WaVo.volt
From inserted, WaVo, WaBnd
Where     inserted.bndno = WaVo.bndno and
        inserted.bndno = WaBnd.bndno and
        WaBnd.SrcTp = 1

Mvh. Thomas
Avatar billede boeck Nybegynder
17. august 2004 - 11:30 #10
Det fungere, tak skal du ha'! :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester