diff --git a/db/4_sem/tag_1/TSQL-Einführung/Einführung-01.sql b/db/4_sem/tag_1/TSQL-Einführung/Einführung-01.sql new file mode 100644 index 0000000..ad87939 --- /dev/null +++ b/db/4_sem/tag_1/TSQL-Einführung/Einführung-01.sql @@ -0,0 +1,92 @@ +-- Beispiel 1 + +-- Variablen Deklaration +declare @Z1 int, @Firstname varchar(50); + +-- Set +set @Z1 = 100; + +-- Print +print 'Zahl Z1 = ' + cast(@Z1 as varchar) + + +-- Beispiel 2 +declare @Z1 int; + +set @Z1 = 1000; +if @Z1 > 100 +begin + print 'Z1 ist eine grosse Zahl'; +end +else +begin + print 'Z2 ist eine kleine Zahl'; +end + + +-- Beispiel 3 +declare @num int +set @num =(SELECT COUNT(*) FROM PA_MITARBEITER); +if @num > 0 + print 'Total Abteilungen = ' + convert(varchar, @num); +else + print 'keine Abteilungen vorhanden'; + + +-- Beispiel 4 +declare @Nr varchar(20), @bez varchar(40); +select @Nr=ABT_ABTNR, @bez = ABT_BEZ + from PA_ABTEILUNG + where ABT_ABTNR = 'DV1'; + +print 'Nr = ' + @Nr + ', Bezeichnung = ' + @bez; + + +-- Beispiel 5 +go +create procedure CalcSumProc (@Z1 int, @Z2 int, @Result int output) +as +set @Result = @Z1 + @Z2; +go + +declare @Sum int, @RetCode int; +set @Sum = 0; +exec CalcSumProc 1, 2, @Sum output; +print 'Sum = ' + cast(@Sum as varchar); + + +-- Beispiel 6 +go +create function CalcSumFunc (@Z1 int, @Z2 int) +returns int +as +begin +declare @result int; + +set @result = @Z1 + @Z2; +return @Result +end +go + + + +-- Beispiel 7 +declare @abtnr varchar(20), @abtbez varchar(50); + +DECLARE Abteilung_Cursor CURSOR FOR + SELECT ABT_ABTNR, ABT_BEZ + FROM PA_ABTEILUNG + ORDER BY ABT_BEZ; + +OPEN Abteilung_Cursor; +FETCH NEXT FROM Abteilung_Cursor + into @abtnr, @abtbez; + +WHILE @@FETCH_STATUS = 0 +BEGIN + print 'Nr = ' + @abtnr + ', Name = ' + @abtbez + FETCH NEXT FROM Abteilung_Cursor + into @abtnr, @abtbez; +END; +CLOSE Abteilung_Cursor; +DEALLOCATE Abteilung_Cursor; diff --git a/db/4_sem/tag_1/TSQL-Einführung/Einführung-02.sql b/db/4_sem/tag_1/TSQL-Einführung/Einführung-02.sql new file mode 100644 index 0000000..d181f14 --- /dev/null +++ b/db/4_sem/tag_1/TSQL-Einführung/Einführung-02.sql @@ -0,0 +1,931 @@ +/* +******************************************************************************* +* * +* SQL Server 2008 / 2008 R2 - Der schnelle Einstieg * +* * +* Kapitel 5 - Transact-SQL - Die Sprache zur Serverprogrammierung * +* * +* © 2009/2010, Klemens Konopasek * +******************************************************************************* +*/ + + +-- Variablen und Datentypen +-- 5.1.1 + + +DECLARE @nachname varchar(50), @vorname varchar(50) +DECLARE @gebdatum date + +SET @nachname = (SELECT PersNachname + FROM tblPersonal + WHERE PersNr = 452) +SET @vorname = (SELECT PersVorname + FROM tblPersonal + WHERE PersNr = 452) +SET @gebdatum = (SELECT PersGebDatum + FROM tblPersonal + WHERE PersNr = 452) +SELECT @nachname NN, @vorname VN, @gebdatum Geburtsdatum + + + +GO +-- ************************************************************************* + + +DECLARE @nachname varchar(50), @vorname varchar(50) +DECLARE @gebdatum date + +SELECT @nachname = PersNachname, + @vorname = PersVorname, + @gebdatum = PersGebDatum +FROM tblPersonal +WHERE PersNr = 452 + +SELECT @nachname NN, @vorname VN, @gebdatum Geburtsdatum + + + + +-- ************************************************************************* + + + +DECLARE @ust tinyint +DECLARE @netto smallmoney, @brutto smallmoney + +SET @ust = 19 +SET @netto = 450 +SET @brutto = @netto * (@ust + 100) / 100 + +SELECT @netto Netto, @brutto Brutto + + + + +-- ************************************************************************* + + +DECLARE @nr int + +SET @nr = @nr + 3 +SET @nr = @nr * 5 + +SELECT @nr Nr + + +GO +-- ************************************************************************* + + + +DECLARE @plz varchar(5) + +SET @plz = '8010' + +SELECT PersNachname, PersVorname +FROM tblPersonal +WHERE PersPlz = @plz + + +GO +-- ************************************************************************* + + +DECLARE @nr int = 3 +SET @nr = @nr + 3 +SET @nr = @nr * 5 +SELECT @nr Nr + + +GO +-- ************************************************************************* + + + + + + + + +-- Benutzerdefinierte Tabellentypen +-- 5.1.2 + +CREATE TYPE KundenTab AS TABLE +( kdnr int PRIMARY KEY, + nachname varchar(50), + vorname varchar(50) +) + +GO +-- ************************************************************************* + + +DECLARE @kunden KundenTab + +INSERT INTO @kunden (kdnr, nachname, vorname) +SELECT KdNr, KdNachname, KdVorname +FROM dbo.tblKunden +WHERE KdLand = 'D' + + +GO +-- ************************************************************************* + + + +CREATE PROCEDURE dbo.spTabellenTest + + @kdnamen KundenTab READONLY + +AS +BEGIN + + SELECT UPPER(nachname) + ' ' + vorname AS Kunde + FROM @kdnamen + ORDER BY 1 + +END + + +GO + + +DECLARE @kunden KundenTab + +INSERT INTO @kunden (kdnr, nachname, vorname) +SELECT KdNr, KdNachname, KdVorname +FROM dbo.tblKunden +WHERE KdLand = 'D' + +EXEC dbo.spTabellenTest @kunden + + +GO +-- ************************************************************************* + + + + + + + + +-- Funktionen + +-- 5.1.3 + + +SELECT @@language + +SELECT @@servername + +SELECT @@VERSION + +SELECT SERVERPROPERTY('ProductVersion') + +-- Datumsfunktionen + +SELECT DATEADD(week, 3, '01.01.2010') + +SELECT DATEDIFF(month, '08.01.2010', '15.11.2010') + +SET LANGUAGE german +SELECT DATENAME(weekday, '23.05.2010') +SELECT DATEPART(weekday, '23.05.2010') + +SET LANGUAGE english +SELECT DATENAME(weekday, '05.23.2010') +SELECT DATEPART(weekday, '05.23.2010') + +SET LANGUAGE german +SELECT DAY('20.04.2009') Tag, MONTH('20.04.2009') Monat, YEAR('20.04.2009') Jahr + +SELECT GETDATE() + + +SELECT ISDATE('24.12.2008'), ISDATE('240.12.2008') + +SELECT CURRENT_TIMESTAMP +SELECT Sysdatetime(), GETDATE() +SELECT Sysutcdatetime() +SELECT Sysdatetimeoffset() + +SELECT Sysdatetimeoffset() AS Graz, + Switchoffset(Sysdatetimeoffset(), '-08:00') AS Vancouver + +SELECT Todatetimeoffset(Sysdatetime(), '-08:00') + + +-- Mathematische Funktionen + +SELECT ROUND(5.129, 2), ROUND(18452, -2), ROUND(1.99,1,1) + +SELECT CEILING(5.129) + + +-- Metadatenfunktionen + +SELECT DB_NAME(), DB_NAME(1), DB_ID(), DB_ID('master') + +SELECT COL_LENGTH('tblArtikel','Artbezeichnung') -- nur innerhalb der DB möglich! + +SELECT COL_LENGTH('wawi.dbo.tblArtikel','Artbezeichnung') -- von jeder DB aus möglich! + +SELECT OBJECT_ID('tblArtikel') + +SELECT OBJECT_NAME('1511676433') + +SELECT COL_NAME(OBJECT_ID('tblArtikel'), 2) + + +-- Sicherheitsfunktionen + +SELECT IS_MEMBER('db_owner') + + +-- Zeichenfolgefunktionen + +SELECT ASCII('m'), CHAR(109) + +SELECT CHARINDEX(' ','SQL Server') + + +DECLARE @name varchar(30), @vorname varchar(15) +DECLARE @position int + SET @name = 'Petra Konopasek' + SET @position = CHARINDEX(' ', @name) + SET @vorname = LEFT(@name, @position - 1) + SELECT @vorname Vorname + + +SELECT MAX(LEN(PersNachname)) [Längster Name] +FROM tblPersonal; + +SELECT PersVorname + ' ' + UPPER(PersNachname) Name +FROM tblPersonal +ORDER BY PersNachname; + +SELECT REPLICATE('.', 15 - LEN(PersNachname)) + PersNachname Name +FROM tblPersonal; + +SELECT SOUNDEX('Maier') Maier, + SOUNDEX('Meyer') Meyer, + SOUNDEX('Mayer') Mayer, + SOUNDEX('Peyer') Peyer, + SOUNDEX('Ober') Ober, + SOUNDEX('Obermann') Obermann, + SOUNDEX('Hausmahn') Hausmahn + + +SELECT ArtBezeichnung + ' kostet € ' + + ArtVKPreis AS Preise +FROM tblArtikel; + + +SELECT ArtBezeichnung + ' kostet € ' + + STR(ArtVKPreis, 5, 2) AS Preise +FROM tblArtikel; + + + +DECLARE @name varchar(30) +DECLARE @nachname varchar(15) +DECLARE @position int + SET @name = 'Alina Konopasek' + SET @position = CHARINDEX(' ', @name) + SET @nachname = SUBSTRING(@name, @position + 1, 15) + SELECT @nachname Nachname + + + +SELECT SUBSTRING(@@VERSION, 35, 4) AS Version + + +-- Systemfunktionen + +SELECT SYSDATETIME() As Datum, + CONVERT(varchar,SYSDATETIME(), 4) As [Jahr 2-stellig], + CONVERT(varchar,SYSDATETIME(), 104) As [Jahr 4-stellig] + + + +SELECT PersNachname FROM tblPersonal +WHERE PersEintritt = '01.04.2001'; + +SELECT PersNachname FROM tblPersonal +WHERE PersEintritt = '01.04.2001 8:00'; + + +SELECT GETDATE() As Datum, + CONVERT(datetime,CONVERT(varchar,GETDATE(),4),4) + As NurDatum + + + +SELECT PersNachname FROM tblPersonal +WHERE CAST(PersEintritt AS DATE)= '01.04.2001'; + + + +SELECT HOST_NAME() As Arbeitsplatz, HOST_ID() As ID + + + +INSERT INTO tblArtikel (ArtBezeichnung, ArtGruppe, + ArtVKpreis, ArtEKPreis, ArtLief) +VALUES('Wassereimer 15L', 'GA', 3.99, 2.12, 1003); +SELECT @@IDENTITY "Neue Artikelnunmmer" + + + +SELECT KdTitel + ' ' + KdAkadGrad + ' ' + + KdNachname + ' ' + KdVorname As Kunden +FROM tblKunden +ORDER BY KdNachname; + + + +SELECT ISNULL(KdTitel + ' ','') + + ISNULL(KdAkadGrad + ' ', '') + + KdNachname + ' ' + KdVorname AS Kunden +FROM tblKunden +ORDER BY KdNachname; + + + +BEGIN TRAN + +UPDATE tblArtikel +SET ArtVKPreis = ArtVKPreis * 0.95 +WHERE ArtVKPreis > 200; + +SELECT @@ROWCOUNT "Anzahl um 5% verbilligt" + +ROLLBACK TRAN + + +-- Rangfolgefunktionen + + +SELECT Artbezeichnung AS Bezeichnung, + ArtVKPreis AS Preis, + RANK() OVER( ORDER BY ArtVKPreis DESC) AS Rang +FROM tblArtikel; + + +SELECT Artbezeichnung Bezeichnung, + ArtVKPreis Preis, + ArtGruppe Gruppe, + RANK() OVER( PARTITION BY ArtGruppe + ORDER BY ArtVKPreis DESC) AS Rang +FROM dbo.tblArtikel; + + + + +SELECT Artbezeichnung Bezeichnung, + ArtVKPreis Preis, + DENSE_RANK() OVER(ORDER BY ArtVKPreis DESC) AS Rang +FROM dbo.tblArtikel; + + + +SELECT PersNachname AS Nachname, + PersVorname As Vorname, + NTILE(5) OVER( ORDER BY PersGebDatum) AS Gruppe +FROM tblPersonal; + + +SELECT Artbezeichnung AS Bezeichnung, + ArtVKPreis AS Preis, + ROW_NUMBER() OVER( ORDER BY ArtVKPreis DESC) AS "lfd. Nr." +FROM tblArtikel; + + + + +-- Hierarchie-ID-Funktionen + +DECLARE @root hierarchyid +SET @root = hierarchyid::GetRoot() +SELECT @root.ToString() AS Wurzeleintrag, @root AS WurzelID + + +DECLARE @nachfolger hierarchyid +SET @nachfolger = @root.GetDescendant(NULL, NULL) +SELECT @nachfolger.ToString() AS Nachfolger + +SELECT @nachfolger.IsDescendantOf(@root) AS IstNachfolger1, +@root.IsDescendantOf(@nachfolger) AS IstNachfolger2 + +SELECT @root.GetLevel() AS LevelRoot, +@nachfolger.GetLevel() AS LevelNachfolger + +DECLARE @vorgaenger hierarchyid +SET @vorgaenger = @nachfolger.GetAncestor(1) +SELECT @vorgaenger.ToString() As Vorgänger + + + +-- ************************************************************************* +-- Kontrollstrukturen + + +-- 5.1.4 +GO + + +DECLARE @monat tinyint + SET @monat = MONTH(GETDATE()) + IF @monat <= 6 + PRINT 'Wir sind in der ersten Jahreshälfte.' + ELSE + PRINT 'Wir befinden uns im zweiten Halbjahr.' + + +-- ************************************************************************* +GO + +DECLARE @kunde int +DECLARE @interesse char(3) + + SET @kunde = 136 + SET @interesse = 'HUG' + + INSERT INTO tblKundeninteressen + VALUES (@kunde, @interesse) + + +SELECT * FROM tblKunden; +SELECT * FROM tblKundenInteressen; + + +GO +-- ************************************************************************* + +DECLARE @kunde int +DECLARE @interesse char(3) + + SET @kunde = 136 + SET @interesse = 'HUG' + + IF (SELECT COUNT(*) FROM tblKundenInteressen + WHERE KdNr = @kunde AND IntCode = @interesse) = 1 + PRINT 'Zuordnung bereits vorhanden.' + ELSE + INSERT INTO tblKundenInteressen + VALUES (@kunde, @interesse); + + +GO +-- ************************************************************************* + + +BEGIN TRAN + +DECLARE @kunde int +DECLARE @interesse char(3) + + SET @kunde = 136 + SET @interesse = 'SPO' + + IF (SELECT COUNT(*) FROM tblKundenInteressen + WHERE KdNr = @kunde AND IntCode = @interesse) = 1 + PRINT 'Zuordnung bereits vorhanden.' + ELSE + BEGIN + INSERT INTO tblKundenInteressen + VALUES (@kunde, @interesse); + PRINT 'Interesse wurde zugewiesen.' + END + + +--ROLLBACK TRAN +GO +-- ************************************************************************* + + + +IF MONTH(SYSDATETIME()) IN(1,2,3,4,5) + PRINT 'Vorsaison' +ELSE + IF MONTH(SYSDATETIME()) IN(6,7,8,9) + PRINT 'Hauptsaison' + ELSE + PRINT 'Nachsaison' + + + + +-- ************************************************************************* + + +IF MONTH(SYSDATETIME()) IN(1,2,3,4,5) + PRINT 'Vorsaison' +ELSE + IF MONTH(SYSDATETIME()) IN(6,7,8,9) + BEGIN + PRINT 'Hauptsaison' + PRINT 'Hier ist alles sehr teuer.' + END + ELSE + PRINT 'Nachsaison' + + + +-- ************************************************************************* + + +DECLARE @kunde int +DECLARE @interesse char(3) + + SET @kunde = 132 + SET @interesse = 'SPO' + + IF (SELECT COUNT(*) FROM tblKundenInteressen + WHERE KdNr = @kunde AND IntCode = @interesse) = 1 + OR (SELECT KdAktiv FROM tblKunden + WHERE KdNr = @kunde) = 0 + PRINT 'Zuordnung bereits vorhanden oder Kunde nicht mehr aktiv.' + ELSE + BEGIN + INSERT INTO tblKundenInteressen + VALUES (@kunde, @interesse); + PRINT 'Interesse wurde zugewiesen.' + END + + + +-- ************************************************************************* + + + +DECLARE @wotag varchar(10) +SET @wotag = CASE DATEPART(weekday, SYSDATETIME()) + WHEN 1 THEN 'Montag' + WHEN 2 THEN 'Dienstag' + WHEN 3 THEN 'Mittwoch' + WHEN 4 THEN 'Donnerstag' + WHEN 5 THEN 'Freistag' + WHEN 6 THEN 'Samstag' + ELSE 'Sonntag' + END +SELECT @wotag [Heute ist] + + + +-- ************************************************************************* + + +DECLARE @typ varchar(10) +SET @typ = CASE WHEN DATEPART(weekday, GETDATE()) < 6 + THEN 'Arbeitstag' + ELSE 'Wochenende' END +SELECT @typ "Heute ist" + + + + +-- ************************************************************************* + + +SELECT CASE PersGeschlecht WHEN 1 THEN 'Frau' ELSE 'Herr' END Anrede, + PersVorname Vorname, + PersNachname Nachname +FROM tblPersonal + + + +-- ************************************************************************* + +-- Cursor für Datenzugriffe einsetzen + + +-- 5.1.5 + + +DECLARE @kdnr int +DECLARE @nachname varchar(50) + + +DECLARE kunden_cursor CURSOR LOCAL STATIC +FOR + SELECT KdNr, KdNachname + FROM tblKunden + WHERE KdAktiv = 1 + +OPEN kunden_cursor +FETCH NEXT FROM kunden_cursor INTO @kdnr, @nachname + + +WHILE @@fetch_status = 0 +BEGIN + --... + FETCH NEXT FROM kunden_cursor INTO @kdnr, @nachname +END + + +CLOSE kunden_cursor +DEALLOCATE kunden_cursor + + + +-- ************************************************************************* + +-- Transaktionssteuerung + + +-- 5.2.1 + +DELETE FROM tblKunden WHERE KdAktiv = 0; + + + +-- 5.2.2 + +SELECT * FROM tblTestpersonal; + + +UPDATE tblTestpersonal +SET Nachname = 'Untermann' +WHERE Nr = 101; + + +SELECT * +FROM tblTestpersonal +WHERE Nr = 101; + + +ROLLBACK TRAN + + +BEGIN TRANSACTION + + +DELETE FROM tblTestpersonal +WHERE Abtlg IN('MA', 'EK'); + + +INSERT INTO tblTestpersonal +VALUES(700, 'Deutschmann', 'MA', SYSDATETIME()); + + +SELECT * FROM tblTestpersonal ORDER BY Nr; + + +ROLLBACK TRANSACTION + + +SELECT * FROM tblTestpersonal ORDER BY Nr; + + +BEGIN TRANSACTION + + +DELETE FROM tblTestpersonal +WHERE Abtlg = 'GL'; + + +INSERT INTO tblTestpersonal +VALUES(700, 'Deutschmann', 'MA', SYSDATETIME()); + + +COMMIT TRANSACTION + + + +-- ************************************************************************* + +-- SET-Optionen verwenden + +-- 5.3 + + +SET ANSI_NULLS ON +DECLARE @agrad varchar(10) +SET @agrad = Null + +SELECT PersNachname, PersAkadGrad +FROM tblPersonal +WHERE PersAkadGRad = @agrad; + + + +GO + + +SET ANSI_NULLS OFF +DECLARE @agrad varchar(10) +SET @agrad = Null + +SELECT PersNachname, PersAkadGrad +FROM tblPersonal +WHERE PersAkadGRad != @agrad; + + +GO +-- ************************************************************************* + +SELECT PersAkadGrad + ' ' + PersNachname AS Mitarbeiter +FROM tblPersonal; + + +SET CONCAT_NULL_YIELDS_NULL OFF + +SELECT LTRIM(PersAkadGrad + ' ' + PersNachname) AS Mitarbeiter +FROM tblPersonal; + +SET CONCAT_NULL_YIELDS_NULL ON + +SELECT ISNULL(PersAkadGrad + ' ', '') + PersNachname AS Mitarbeiter +FROM tblPersonal; + + +GO +-- ************************************************************************* + +SET DATEFIRST 1 +SELECT DATEPART(weekday, '01.01.2010') As Tag + +SET DATEFIRST 7 +SELECT DATEPART(weekday, '01.01.2010') As Tag + +-- ************************************************************************* + +SET DATEFORMAT dmy +DECLARE @datum datetime +SET @datum = '15.08.2010' + +-- ************************************************************************* + +SET IDENTITY_INSERT tblArtikel ON + +INSERT INTO tblArtikel (ArtNr, ArtBezeichnung, ArtGruppe, + ArtVKpreis, ArtEKPreis, ArtLief) +VALUES (2222, 'Gartenschlauch 15m', 'GA', 23.99, + 17.11, 1003); + + + +-- ************************************************************************* + +SELECT langid, name, alias, dateformat, datefirst +FROM master.sys.syslanguages; + +SET LANGUAGE english +SET LANGUAGE français +SET LANGUAGE german +SET LANGUAGE latviešu + + +-- ************************************************************************* + +SET QUOTED_IDENTIFIER OFF +CREATE TABLE quot_id_test +( ID int, + "Kunden Name" varchar(60) ); + + +-- ************************************************************************* + +SET ROWCOUNT 5 + +SELECT PersNr, PersNachname, Persvorname +FROM tblPersonal +ORDER BY 1; + +SET ROWCOUNT 0 + + + + +-- ************************************************************************* + +-- Fehlerbehandlung + +-- 5.4 + + +SET NOCOUNT ON + +DECLARE @gruppe char(2), @name varchar(30) + +SET @gruppe = 'GE' +SET @name = 'Geschirr' + +INSERT INTO dbo.tblArtikelGruppen (ArtGr, ArtGrText) +VALUES (@gruppe, @name); + +IF @@ROWCOUNT = 0 + SELECT 'Fehler!' As Ergebnis +ELSE + SELECT 'Erledigt ;-)' As Ergebnis + + +GO + +-- Fehler "vermeiden" + +SET NOCOUNT ON + +DECLARE @gruppe char(2), @name varchar(30) + +SET @gruppe = 'GE' +SET @name = 'Geschirr' + +IF exists ( SELECT * + FROM dbo.tblArtikelGruppen + WHERE ArtGr = @gruppe) + SELECT 'Fehler!' As Ergebnis +ELSE +BEGIN + INSERT INTO dbo.tblArtikelGruppen + VALUES (@gruppe, @name); + SELECT 'Erledigt ;-)' As Ergebnis +END + + +GO + +-- Fehler "behandeln" + + +SET NOCOUNT ON + +DECLARE @gruppe char(2), @name varchar(30) + +SET @gruppe = 'GE' +SET @name = 'Geschirr' + +BEGIN TRY + INSERT INTO dbo.tblArtikelGruppen + VALUES (@gruppe, @name); + SELECT 'Erledigt ;-)' As Ergebnis +END TRY +BEGIN CATCH + SELECT 'Fehler!' As Ergebnis +END CATCH + + + +GO + +-- inkl. Transaktion + + +SET NOCOUNT ON + +DECLARE @gruppe char(2), @name varchar(30) + +SET @gruppe = 'GE' +SET @name = 'Geschirr' + +BEGIN TRY + BEGIN TRANSACTION + + INSERT INTO dbo.tblArtikelGruppen + VALUES (@gruppe, @name); + + COMMIT TRANSACTION + + SELECT 'Erledigt ;-)' As Ergebnis +END TRY +BEGIN CATCH + ROLLBACK TRANSACTION + SELECT 'Fehler!' As Ergebnis +END CATCH + + +GO + + + +-- Ausgabe Fehlermeldung + +SET NOCOUNT ON + +DECLARE @gruppe char(2), @name varchar(30) + +SET @gruppe = 'GE' +SET @name = 'Geschirr' + +BEGIN TRY + + BEGIN TRANSACTION + + INSERT INTO dbo.tblArtikelGruppen + VALUES (@gruppe, @name); + + COMMIT TRANSACTION + + SELECT 'Erledigt ;-)' As Ergebnis +END TRY +BEGIN CATCH + ROLLBACK + SELECT ERROR_MESSAGE() As Ergebnis +END CATCH + + +GO diff --git a/db/4_sem/tag_1/procedures.sql b/db/4_sem/tag_1/procedures.sql new file mode 100644 index 0000000..499c1fb --- /dev/null +++ b/db/4_sem/tag_1/procedures.sql @@ -0,0 +1,27 @@ +use Berater; +go + +create FUNCTION fBestverdiener() +RETURNS varchar(100) + +AS BEGIN +DECLARE @nr int, + @nachname varchar(50), + @vorname varchar(50), + @aufgabe varchar(30) +--set nocount on + +SELECT @nr = b.BERATERID, + @nachname = b.BERATERNAME, + @aufgabe = a.AUFGABE +FROM BERATER b INNER JOIN AUFGABE a +ON b.AUFGABEID = a.AUFGABEID +WHERE b.STUNDENLOHN = (SELECT MAX(STUNDENLOHN) +FROM BERATER) + +Return convert(varchar,@nr) + ',' + @nachname + ',' + @aufgabe +END +go + + +select dbo.fBestverdiener(), BERATERNAME FROM BERATER;