Gå til innhold

SQL Trigger: Feil i DB navn


Anbefalte innlegg

Har laget en Trigger som skal trekke ut data til en fil, men jeg får feil på Viewet som jeg bruker. Noen idër på hva som kan være feil ?

 

 

Her er min feilmelding:

 

Server: Msg 208, Level 16, State 4, Procedure Hent_Data_UPDATE, Line 1

Invalid object name 'dbo.SM_ProcessingStepViewV1'.

 

 

Her er min kode:

CREATE Trigger [Hent_Data_UPDATE] ON [dbo].[SM_ProcessingStepViewV1]FOR UPDATE 
AS 

If EXISTS( select * from inserted a JOIN deleted b ON a.Display2=b.Display2 Where b.Status <> 'Results Complete' AND a.Status = 'Results Complete') 


Begin 


SET CONCAT_NULL_YIELDS_NULL OFF  

declare @MyField varchar(800) 

set @MyField='' 

select @MyField=@MyField+' '+Display14+' '+Status+' '+OK+char(13)+char(10) from inserted a JOIN deleted b ON a.Display2=b.Display2  Where b.Status <> 'Results Complete' AND a.Status = 'Results Complete' 


EXEC [dbo].[sp_AppendToFile] @FileName = 'c:\temp\NyTekst.txt', @Text1 = @MyField 

END 

Endret av tmbn
Lenke til kommentar
Videoannonse
Annonse
Hva tenker du på er feil i navnet ? Kjører den ikke mot feil sted. Kan dette forresten ha noe med rettigheter å gjøre ?

7228495[/snapback]

Invalid object name 'dbo.SM_ProcessingStepViewV1'

SQL Server finner ikke 'dbo.SM_ProcessingStepViewV1'. Dette kan ha en av flere årsaker:

  • Viewet har annen eier enn dbo (i SQL Server 2005: Annet schema)
  • Du kjører spørringen mot gal database (vanlig i så tilfelle: mot master istedenfor brukerdatabasen)
  • Du har skrevet navnet på viewet galt

Dersom du hadde gått mot et view som du ikke har rettigheter på skulle du fått en annen feilmelding som fortalte deg at du ikke hadde tilstrekkelig med rettigheter.

Lenke til kommentar

Hmmm..eier er dbo og navnet er skrevet riktig. Men, litt lenger nede så kjøerer jeg spørringene mot "inserted" og "deleted". Kan det ha noe med dette og Master databasen ? Slik jeg forstod det var det disse tabellene som jeg skulle bruke når jeg lagde en trigger.

Lenke til kommentar
Hmmm..eier er dbo og navnet er skrevet riktig. Men, litt lenger nede så kjøerer jeg spørringene mot "inserted" og "deleted". Kan det ha noe med dette og Master databasen ? Slik jeg forstod det var det disse tabellene som jeg skulle bruke når jeg lagde en trigger.

7229501[/snapback]

Det er jo bare å sjekke hvilken database du er koblet opp til det. Du kan jo for eksempel kjøre en

select db_name();

og hente ut resultatet, for å se hvilken database du egentlig kjører spørringen mot.

Lenke til kommentar

Ok! Den er grei. Vet at jeg ikke kjører fra Master databasen. Men, tenkte siden jeg bruker tabellene "inserted" og "deleted", at disse blir opprettet av triggeren automatisk i Master databasen.

 

Det er vel disse tabellene jeg må bruke i en UPDATE trigger, eller har jeg forstått feil ?

Lenke til kommentar
Ok! Den er grei. Vet at jeg ikke kjører fra Master databasen. Men, tenkte siden jeg bruker tabellene "inserted" og "deleted", at disse blir opprettet av triggeren automatisk i Master databasen.

 

Det er vel disse tabellene jeg må bruke i en UPDATE trigger, eller har jeg forstått feil ?

7235235[/snapback]

Inserted og deleted er pseudo-tabeller, og har INGEN ting med problemstillignen å gjøre, og ja det er de du må bruke.

Lenke til kommentar
Feilen er enkel. Du har ikke lov til å lage FOR (det samme som AFTER) triggere på et view. Kun INSTEAD OF triggere er tillatt på views.

 

Det betyr at du må bruke inserted og delete tabellene for å skrive endringene til base-tabellene/viewene manuelt.

7244467[/snapback]

Takk og lov at Microsoft har gjort noe med feilkoden som rapporteres i senere versjoner. I SQL Server 2005 ville han ha fått:

 

Msg 8197, Level 16, State 6, Server MYSERVER, Procedure MYTRIGGER, Line 1

Object 'MYVIEW' does not exist or is invalid for this operation.

Endret av roac
Lenke til kommentar

Ok! Så da kan jeg ikke lage en trigger mot View i det hele tatt ?? Bare manuelt ?

 

Uansett, kan sikkert lage det mot en tabell istedenfor. Bare veldig rart at Microsoft lar meg lage en View med FOR når jeg høyreklikker på et View. Denne funksjonen burde jo da vært tatt bort. Bad.

Lenke til kommentar

Stemmer. Du kan kun lage INSTED OF triggere på views, og da må triggeren være ansvarlig for å skrive dataene til de respektive underliggende views/tables.

 

Enig i at det er en bug i Management Studio at en får opp en AFTER trigger og ikke en INSTEAD OF trigger som template for et view.

 

Sender en mail til Microsoft.

Lenke til kommentar
  • 1 måned senere...

Hehe....ser ut som Microsoft har tenkt å gjøre noe med dette en framtidig versjon. Bra!

 

Ellers pga. oppdateringer som hele tiden skjer mot databasen har jeg ikke mulighet/lov til å lage triggeren direkte på en tabell. Kan jeg lage triggeren på et View, men gå igjennom en tabell som er linket opp mot Viewet med en ID ?

 

I tilfelle noen forslag på hvor jeg starter med tanke på min kode øverst ?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...