Benutzer mit den meisten Antworten
Trigger auf einen View (MS-SQL2008R2)

Frage
-
Hallo,
ich habe einen View erstellt und möchte darauf einen Insert-Trigger darauf setzen, der mir einen weiteren View erstellt. Leider komme ich damit überhaupt nicht klar. Was ist an dem Code falsch?
CREATE TRIGGER TestTrigger ON [dbo].[Projektstand]
after INSERT as
BEGIN
SET NOCOUNT ON
-- View löschen fals vorhanden
IF EXISTS (SELECT * FROM sys.views
WHERE object_id = OBJECT_ID(N'[dbo].[TESTVIEW]'))
DROP VIEW [dbo].[TESTVIEW]
GO
-- view neu erstellen undbefüllen
create view Testview as
SELECT [Name]
,[Unternehmensbereich]
,[Kurztext]
,[Kurzname]
,[Name2]
,[Straße]
,[PLZ]
,[Ort]
,[Kostenstelle]
,[Status]
,[Nachkalkulation]
,cast ([Angebotssumme] AS float) as Angebotssumme
,cast ([Auftragssumme] AS float) as Auftragssumme
,cast ([Forderungen] AS float) as Forderungen
,cast ([Zahlungen] as Float) as Zahlungen
,cast ([Restbetrag] as Float) as Restbetrag
,Cast(Rechnungsdatum as Float)as Rechnungsdatum
,Cast([Nettoforderungen] as Float)as Nettoforderungen
,Cast([Gesamtkosten] as Float)as Gesamtkosten
,Cast([Gewinn] as Float)as Gewinn
,Cast([Gewinnanteil] as Float)as Gewinnanteil
,Cast([Ertrag] as Float)as Ertrag
,round([DB1hIst],2)as DB1
,[Eigentümer],
Cast([Änderungsdatum] as date)as [Änderungsdatum]
,[Bearbeiter]
FROM [Wellmann].[dbo].[Projektstand]
GO
Jeder einzelne Part, das Löschen des View und das neu erstellen funktionieren für sich selbst.
Wäre nett wenn mir jemand helfen kann
Antworten
-
Hi,
Du willst bei jedem INSERT eine neue View erstellen? Das meinst Du hoffentlich nicht ernst.
Um dir zu sagen, was falsch ist (außer, dass Du das überhaupt machen willst) müsstest Du uns schon verraten, welche Fehlermeldung Du erhältst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan HoffmannModerator Mittwoch, 29. Mai 2013 12:24
- Als Antwort markiert Ionut DumaModerator Dienstag, 11. Juni 2013 13:47
Alle Antworten
-
Hi,
Du willst bei jedem INSERT eine neue View erstellen? Das meinst Du hoffentlich nicht ernst.
Um dir zu sagen, was falsch ist (außer, dass Du das überhaupt machen willst) müsstest Du uns schon verraten, welche Fehlermeldung Du erhältst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan HoffmannModerator Mittwoch, 29. Mai 2013 12:24
- Als Antwort markiert Ionut DumaModerator Dienstag, 11. Juni 2013 13:47
-
Hallo,
manche DDL Statements müssen zwingend das erste Statement in einem Batch sein, CREATE VIEW gehört dazu. Das ist also so schon mal nicht möglich.
Einfaches Beispiel zum Austesten
CREATE PROCEDURE dbo.TestAussen AS CREATE VIEW dbo.TestInnen AS SELECT 'Hello World' AS Result
Liefert bereits beim Parsen die gleiche Fehlermeldung.
Olaf Helper
Blog Xing -
Hi,
glaub mir, Du willst in einem INSERT Trigger keine neue View erstellen. Welchen Sinn soll das auch haben?
Wenn Du das dennoch machen willst, musst Du das CREATE VIEW Statement wohl in eine nvarchar Variable packen und dieses dynamische Statement per EXEC ausführen. Schau dir hierfür aber mal das hier an:
http://www.insidesql.org/blogs/frankkalis/2004/07/16/dynamisches-sql-fluch-und-segen
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Der Ansatz ist schon falsch.
Eine View ist nur ein abgespeichertes Statement und enthält in der Regel keine Daten. Damit bietet sie immer den Blick auf die aktuellen Daten, ohne dass hier etwas aktualisiert werden müsste.Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu/ -
Hallo,
ich denke Du hast ein falsches Verständnis davon, was Sichten sind.
Die stellen - der Name ist Programm - eine Sicht auf eine (oder mehrere) Tabelle(n) dar. Sie bilden dabei die Daten der zugrunde liegenden Tabelle(n) ab. Ändert sich der Inhalt der Tabelle so sieht man dies auch in der Sicht.
Es gibt also keinen Grund beim Ändern des Datenbestandes eine Sicht (neu) zu erstellen.
Der Syntaxfehler ist wiederum nur eine Randerscheinung: Sichten dürfte nur als einzige Anweisung in einem Stapel verendet werden. In einem Trigger geht das deswegen schon mal gar nicht ohne Umwege.
Gruß Elmar
-
Ja, ich kann nun auch erkennen das mein Ansatz nicht richtig ist.
Allerdings fülle ich den ersten View mit einem sehr aufwändigen Statement um dann mit dem View im SharePoint arbeiten zu können.
Beim erstellen des ersten Views sollen dann eine Reihe weiterer Views erstellt werden. Das ist eigentlich die Aufgabe die ich zu lösen versuche.
Gruß
Heiko
-
Erstelle die Sichten einmalig alle gemeinsam vorher. Mehr ist nicht zu tun.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu/ -
Hallo Heiko,
evtl. solltest Du dir wirklich erst einmal klar darüber werden, was eine View überhaupt ist.
Eine View wird nicht gefüllt, eine View liefert lediglich Daten aus den der View zugrundeliegenden Tabellen/Datenquellen in einer bestimmten Form. D.h. die View selbst beinhaltet überhaupt keine Daten.
Warum Du beim Erstellen einer View weitere Views erzeugen willst, verstehe ich nicht. Die Views kann man im Vorfeld erstellen und damit hat sich das dann.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community