SQL-Trigger, unterschiedliches Verhalten zwischen Adminkonto und StandardUser-Konto

Status
Für weitere Antworten geschlossen.
@kwells Um das klarzustellen: wie in jedem Forum hat niemand der User eine Möglichkeit zu wissen, mit welcher IP-Adresse Du hier surfst.
 
Werbung:
@Distrilec
in deiner ersten Antwort ging es noch um mögliche Rechte. In deiner deiner vorletzten Antwort, an mich, dann die zwei Fragen.
Wenn ich sowas vor mir hab tu ich mich schwer zu glauben, dass da jemand wirklich noch versucht sich hineinzudenken, sondern stattdessen nur Nebenschauplätze eröffnet. Der Eindruck verstärkt sich wenn ich lesen muss, dass der Trigger nichts macht. Dass er aber was macht, hatte ich doch mehrmals geschrieben. Das übriggebliebene Problem ist die View, von der Änderungen nur übertragen werden, wenn ich den Trigger aus der zugrundeliegenden Tabelle entferne.

Erst mit deiner letzten Antwort ändert sich dieser Eindruck wieder etwas.
Der Code, wie von mir gepostet, hat also eine Endloschleife, und es fehlen dbo Alias. Können das die Gründe sein für die Errormessage der View?

Aber jetzt gerade beim Schreiben verändert sich dieser Eindruck schon wieder. Bin einfach totsicher, würde ich das glattziehen, also dbo alias einfügen, Endlosschleife rausnehmen, was dann? Wäre das Verhalten mit der View dann behoben? Wenn das so wäre hättets du mein Code schon dahingehend ausgebessert und gepostet, mit all den Anmerkungen.

Was wirst du jetzt sagen/schreiben, dass es nicht deine Aufgabe ist den Code eines TE auszubessern, oder irgendsowas?
Das klingt wahrscheinlich sehr 'motzki', aber kanns nicht ändern.
dbo alias, Endlosschleife, das sind alles Feststellungen die nur darauf abzielen, dass ich, der Frager, nun anfange mit, wo, wie, was endlosschleife, 'begin' und 'end' fehlen auch... usw.
Wenn ich mich darauf einlasse, was dann? Wer kommt dann alles aus seien Löchenr um sich ein Stück Reputation zu verdienen.

@admin
so soll es sein, aber in vielen Foren lässt sich die IP eines Users doch sogar von anderen Usern auslesen, meisst in Verbindung mit diesem winkenden smili .
 
Ich versteh gar nicht mehr worum es hier geht. Ist das Problem jetzt behoben? Wenn nicht, was ist aktuell das Problem?
 
Hallo Karl,

in Foren ist es immer sehr schwierig eine Antwort richtig ankommen zu lassen, denn man sitzt dem Forenpartner ja nicht gegenüber und man bekommt nicht von seiner Mimik, Gestik oder Betonung übertragen.
Ich kann dir aber versichern, dass in diesem Forum jeder ein ausschließliches Interesse daran hat, dir zu helfen.

Unsere Fragen zielen nur darauf ab, mehr Hintergrund des Problems in Erfahrung zu bringen.
Ich habe mir deine Trigger-Programmierung nun ebenfalls angeschaut und kann hier auch ein paar Dinge mir nur zusammenreimen.
In den "Inserted" und "Deleted"-Tabellen werden tmp-Spalten ausgelesen, ein Update erfolgt dann auf die Spalten Stunden und Tage.
Um das nun genau nachstellen zu können wäre der Aufbau der Tabelle hilfreich.

Was auch helfen würde wäre eine Definitions-Beschreibung des Triggers. Nur weil der Code eines Triggers vorliegt bedeutet dies nicht, dass die Programmierung auch das gewünschte verhalten widerspiegelt.
Daher auch die Frage von Destrilec - Was soll der Trigger bewirken. Was soll das Ergebnis des ausgeführten Triggers sein?.
Welche Voraussetzungen hast du in dieser Definition vorgesehen? Darf nur eine einzelne Zeile in der Tabelle existieren, müssen Spalten bei einem Insert leer bleiben etc.

Wir fragen hier nach, weil wir das Grundproblem verstehen wollen. Manchmal, und da spreche ich aus Erfahrung :), sind die eigenen Ansätze nicht grade die Besten oder man geht auch den völlig falschen Weg.
Daher ist es schon mal ganz hilfreich eine komplette Fragestellung weiterzugeben, um Anregungen von anderen zu bekommen.
Genau dafür sind Foren wie diese gedacht.

Mein Tip: nutze das, wir wollen versuchen dir zu helfen.

Viele Grüße,
Tommi
 
Die vermeintlichen Störungen zu entfernen(endlosschleife, dbo, etc.) sollte für jeden von euch kein Hürde sein.
Danach wird jeder sehen, dass es mit dem Problem hier nichts zu tun hat, ist ganz einfach.

Statt dies zu tun werden weitere vermeintliche Mängel aufgetragen.

Ihr wisst die Antwort nicht und verschanzt euch hinter all diesem Zeug.

Das kann man auch daran ablesen, dass zunächst fehlende Rechte als mögliche Ursache genannt wurden.

Daaaannn plötzlich als dies ausgräumt war stellt man fest, dass hier und da was schief sitzt.

@Tommy
die Struktur der Tabelle fehlt dir??
 
Hallo Karl,

es ist richtig, wir wissen aktuell nicht, wodurch der von die beschriebene Fall auftritt. Deshalb versuche ich grade deine Einrichtung an meinem SQL Server nachzubilden.
Das kann ich halt nur, wenn ich die entsprechenden Informationen besitze.

Wenn deine Umgebung bei mir nachgestellt ist kann ich mit systematischer Fehlersuche versuchen den Sachverhalt zu klären und dir zu helfen.
Eine erste Information wäre halt der Aufbau der Tabelle.

Wenn ich mehr Informationen benötige und deine Ausgangs-Beschreibung hierzu noch nicht ausreicht, werde ich diese bei dir noch einholen.

Viele Grüße,
Tommi
 
Was der Trigger macht hat Distrilec im Beitrag 15 selber beschrieben, um später zu schreiben, dass er nicht weiss was der Trigger macht.

Lieber Tommy,
ich nehm dir gerne was von der Fehleranalyse ab. Ich hab den Trigger in drei verschiedenen Ausführungen. Alle drei übertragen Änderungen aus der tmp Tabelle in die org Tabelle.
Packt man die tmp Tabelle in eine View kommts zum Error, mit jener Message wie oben beschr.
Per Definition des Begriffs Analyse würde ich den Error unter das Thema View verorten.
 
@kwells Was der Trigger macht ist uns allen klar -> Nichts sinnvolles... Total unnötig das Ding und deswegen muss man da auch nichts reparieren... Schmeiß weg und gut is...

Meine Frage ist und bleibt immernoch was SOLL der Trigger machen, weil das offensichtlich nicht das gewünschte Ergebnis sein kann... (Zumindest würde davon jeder halbwegs rationale DB-Entwickler ausgehen...)
 
Hallo Karl,

erst in deinem letzten Beitrag hast du geschrieben, dass es sogar zwei Tabellen gibt und der Trigger soll von einer temporären Tabelle in eine originale Tabelle geschrieben werden, ist das korrekt?
Das war zuvor nirgendwo beschrieben und ist auch nicht dem Trigger-Code zu entnehmen. Der Programmier-Code zeigt nämlich nur, dass der Trigger auf der gleichen Tabelle angelegt ist, auf die im Trigger dann ein Update abgesetzt wird, was unverständlich ist und verwirrt.

Deshalb noch einmal die Frage danach, was du eigentlich vorhast, die eigentliche Aufgabenstellung.
Mit halben Informationen kann man keine Problemstellung nachbilden.

Fangen wir also noch einmal von vorne an.

Hilfreich wären folgende Informationen, dann können wir auch dir helfen:
1. Beschreibung der Aufgabenstellung
2. DB-Diagramm mit Tabellenaufbau und angelegten Views
3. Eingerichtete Berechtigungen
4. genaue Syntax der Fehlermeldung

Viele Grüße,
Tommi
 
aus dem Posting 3
"Ich hatte die tblTesttmp via Script erstellt. Via Mausklick mir das script für die tblTest geben lassen und dasscript ausgeführt."
da wird auch schon von zwei Tabellen gesprochen.

Ich bin in Foren nicht ganz so häufig unterwegs wie manch anderer, aber geholfen hab ich auch schon.Wenn mir dann so ein Bock auffällt, im Code des TE, dann zieh ich den gerade und weise mal kurz darauf hin. So mach ich das, da ist meine Art zu helfen.



Und für dieses Thema:
man mache zwei kleine Tabellen, mit drei,vier Spalten
Man gebe dann einer von beiden einen trigger, der Änderung auf die andere überträgt und zieht diese Tabelle in eine View.
Man öffen die View und ändert einen Eintrag.
Ups, jetzt hab ich vergessen zu schrieben, dass die Tabellen natürlich einen PK haben müssen, mist wieder was falsch gemacht
 
Lieber Karl,

du hast immer noch nicht alle meine Fragen beantwortet.
Deinen Code konnte man zudem nicht verbessern, da ja nicht klar war, was denn eigentlich erreicht werden sollte, diese Information fehlte halt.

Ich habe inzwischen aus den von mir zusammengereimten Informationen folgendes Szenario erstellt:
Ich habe eine Original-Tabelle mit PK und einigen Zusatspalten angelegt.
Eine 2. Tabelle, ich nenne Sie bak-Tabelle, ist ebenfalls angelegt mit den gleichen Spalten aber ohne irgendeine Einschränkung und auch ohne PK.
Zusätzlich ist eine View angelegt, die alle Felder der Original-Tabelle abfragt.
In der Original-Tabelle ist ein Trigger angelegt, der bei einem Insert oder Update die neuen oder geänderten Werte 1:1 in die Bak-Tabelle überträgt
Die Funktionsweise des Triggers ist demnach eine Spiegelung der Original-Tabelle.

Bei mir funktioniert diese Mimik, die Wert-Änderung oder die Eintragung neuer Werte auch ohne Berechtigung als sysadmin, ohne Probleme.

Viele Grüße,
Tommi
 
Womit wir wieder bei meiner ursprünglichen Prognose wären:
So wie dieser Coder zurzeit aussieht erzeugt es eine Endlosschleife. Warum?
Weil er immer wieder die gleiche Tabelle updated...
Code:
ALTER Trigger [dbo].[myTestrigger] ON [dbo].[tblTesttmp] for insert,
update as
DECLARE @insPk Int
DECLARE @delPk Int
DECLARE @insStunden Int
DECLARE @delStunden Int
DECLARE @insTage Int
DECLARE @delTage Bit

SELECT @insPk  = inserted.IDPK from inserted
SELECT @delPk  = deleted.IDPK from deleted 
SELECT @insStunden  = inserted.StundenTmp from inserted
SELECT @delStunden  = deleted.StundenTmp from deleted
SELECT @insTage  = inserted.TageTmp from inserted
SELECT @delTage  = deleted.TageTmp from deleted

UPDATE tblTesttmp SET  Stunden=@insStunden, Tage=@insTage
WHERE @insPk = IDPK And @delStunden=Stunden  And @delTage=Tage
Und jetzt wage ich einfach mal eine kleine Änderung...
Code:
ALTER Trigger [dbo].[myTestrigger] ON [dbo].[tblTest] for update as
DECLARE @insPk Int
DECLARE @delPk Int
DECLARE @insStunden Int
DECLARE @delStunden Int
DECLARE @insTage Int
DECLARE @delTage Bit

SELECT @insPk  = inserted.IDPK from inserted
SELECT @delPk  = deleted.IDPK from deleted 
SELECT @insStunden  = inserted.StundenTmp from inserted
SELECT @delStunden  = deleted.StundenTmp from deleted
SELECT @insTage  = inserted.TageTmp from inserted
SELECT @delTage  = deleted.TageTmp from deleted

UPDATE dbo.tblTesttmp SET  Stunden=@insStunden, Tage=@insTage
WHERE @insPk = IDPK And @delStunden=Stunden  And @delTage=Tage
Was habe ich getan?
- Den Trigger auf Update beschränkt
- Den Trigger auf die Haupttabelle und nicht die Replik gelegt
- Das Schema vor die Replik geschrieben

Ist das richtig? Ich weiß es nicht... Wir haben bis jetzt ja immernoch keine Tabelledefinitionen, geschweige denn eine Antwort auf unsere Fragen...
Ein kompletter Schuss ins Blaue... Aber das scheint unser Fragesteller ja zu wollen... Also bitte...
 
Der Trigger dürfte übrigens keine tatsächlcihe Endlos-Schleife auslösen da vermutlich das Nestlevel bei 32 schluss macht. Die Endlos-Schleife wird vermutlich nichtmal bemerkt bei 32 Update-Operation mit jeweils einer Zeile und 6 Spalten.
 
Werbung:
Das Stichwort...
Dieser GESAMTE Thread basiert darauf :)

Nur um das nocheinmal zu verdeutlichen:
Eine Datenbank macht keine Annahmen... Sie macht etwas aus einem bestimmten Grund... Und Sie wird es (bei gleich bleibender Basis) immer machen... D.h. da wir den Fehler nicht nachstellen können, hat uns der gute TO nicht alle Informationen zu SEINER Basis zukommen lassen...

Und da er sich schlichtweg weigert... wird er das wohl auch nie tun :)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben