Mittwoch, 8. November 2017

CASE Anweisungen und INLINE IF in T-SQL


Der folgende Beispielcode zeigt wie in SQL die CASE Anweisung eingesetzt werden kann und ebenfalls die Inline IF Anweisung in Statements verwendet wird.


-- START BEISPIELCODE --

-- es wird eine Tabelle KUnden mit Demodatensätzen in der Datenbank angelegt

create table kunden (kunden_nr int,
nachname nvarchar(100), vorname nvarchar(100),kategorie int);

insert into kunden (kunden_nr,nachname,vorname,kategorie) values(1,'Müller','Anne',33);
insert into kunden (kunden_nr,nachname,vorname,kategorie) values(2,'Franke','Mike',34);
insert into kunden (kunden_nr,nachname,vorname,kategorie) values(3,'Fredericks','Hanna',35);
insert into kunden (kunden_nr,nachname,vorname,kategorie) values(4,'Mastroiani','Sarah',34);
insert into kunden (kunden_nr,nachname,vorname,kategorie) values(5,'Scarlatti','Vincenzo',73);


select kunden_nr,nachname,vorname,
case 
when kategorie = 33 then 'Guter Kunde'
when kategorie = 34 then 'Sehr guter Kunde'
when kategorie = 35 then 'Guter Kunde'
else 'normaler Kunde' 
 end as kategorie
from kunden 

-- ODER SO

select kunden_nr,nachname,vorname,
case kategorie
when 33 then 'Guter Kunde'
when 34 then 'Sehr guter Kunde'
when 35 then 'Guter Kunde'
else 'normaler Kunde' 
 end as kategorie
from kunden 


-- case in der ORDER BY Klausel

select  * from kunden order by case when kategorie = 33 then 1
when kategorie = 35 then 2
ELSE 3
end



-- INLINEIF -> IIF


-- IIF
SELECT vorname,nachname,IIF(kategorie = 34,'Top','Not Top') AS TOPORNOT from kunden



-- END BEISPIELCODE --


Dienstag, 7. November 2017

SQL Server und supportete und maximale Grenzen und Größenbeschränkungen

Unter folgenden Link finden SIe die von SQL Server unterstützten und maximalen Größen.
- wieviele Dateigruppen können angelegt werden = 32767
- Wie groß kann eine SQL Server Datenbank werden? = 524 PB (Petabyte)
- Wie groß kann ein Datenfile werden? = 16TB
- Wie groß kann ein Logfile werden? = 2TB 

weitere Infos hier unter folgenden Link:

Inner Join, Left Outer Join, Right Outer Join in 5 Minuten erklärt

Hier der Beispielcode zum Youtubevideo https://youtu.be/CaWOzl0Y_vE


Inner Join, Left Outer Join, Right Outer Join in 5 Minuten erklärt


-- START BEISPIELCODE --

-- definition eindeutiger wert
create table kunden (kunden_nr int,
nachname nvarchar(100), vorname nvarchar(100));

insert into kunden (kunden_nr,nachname,vorname) values(1,'Müller','Anne');
insert into kunden (kunden_nr,nachname,vorname) values(2,'Franke','Mike');
insert into kunden (kunden_nr,nachname,vorname) values(3,'Fredericks','Hanna');


create table bestellungen
(kunden_nr integer,
bestelldatum datetime,
artikelnr nvarchar(100),
anzahl int)

-- müller anne 2 Bestellungen
insert into bestellungen(kunden_nr,bestelldatum,artikelnr,anzahl) values(1,GETDATE(),'Artikel 1',44);
insert into bestellungen (kunden_nr,bestelldatum,artikelnr,anzahl) values(1,GETDATE(),'Artikel 2',17);

insert into bestellungen (kunden_nr,bestelldatum,artikelnr,anzahl) values(2,GETDATE(),'Artikel 7',32);
insert into bestellungen (kunden_nr,bestelldatum,artikelnr,anzahl) values(2,GETDATE(),'Artikel 2',42);
insert into bestellungen (kunden_nr,bestelldatum,artikelnr,anzahl) values(2,GETDATE(),'Artikel 9',4);

select * from kunden;
select * from bestellungen;


-- DER INNER JOIN
-- ZEIGE DIE KUNDEN AN, DIE IN DER TABELLE BESTELLUNGEN MINDESTENS EINE BESTELLUNG HABEN

SELECT kunden.nachname, kunden.kunden_nr, kunden.vorname, bestellungen.artikelnr, bestellungen.anzahl
FROM   kunden INNER JOIN bestellungen
ON kunden.kunden_nr = bestellungen.kunden_nr


-- DER LEFT OUTER JOIN
-- ZEIGE ALLE KUNDEN MIT IHREN BESTELLUNGEN AN, EGAL OB SIE IN  BESTELLUNGEN  HABEN ODER NICHT
SELECT kunden.nachname, kunden.kunden_nr, kunden.vorname, bestellungen.artikelnr, bestellungen.anzahl
FROM   kunden LEFT OUTER JOIN bestellungen
ON kunden.kunden_nr = bestellungen.kunden_nr

-- DER RIGHT OUTER JOIN
SELECT kunden.nachname, kunden.kunden_nr, kunden.vorname, bestellungen.artikelnr, bestellungen.anzahl
FROM   bestellungen RIGHT OUTER JOIN kunden
ON kunden.kunden_nr = bestellungen.kunden_nr


-- END BEISPIELCODE --

Montag, 6. November 2017

Verwenden des APPLY Operators - CROSS und OUTER APPLY in T-SQL


Der Apply Operator ermöglicht es eine Tabelle und eine Tabellenwertfunktion miteinander zu verknüpfen. Ähnlich einem JOIN.

Beispiel:
SELECT * FROM Mitarbeiter m 
CROSS APPLY dbo.GibGehaltZurueck(m.Gehaltsklasse) 

Mittels CROSS Apply können Spaltenwerte der Tabelle zur linken an die parameterisierte Tabellenwertfunktion auf der rechten Seite vergeben übergeben werden.

Aber sehen wir uns das folgende Beispiel an:


-- Anlegen der Beispieltabellen Mitarbeiter und Gehalt sowie der Tabellenfunktion (gibt eine -- Tabelle zurück)  GibGehaltZurueck


-- START TABELLEN U. FUNKTION ERZEUGEN HIER 
USE [tempdb] 
GO

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[Gehalt]') AND type IN (N'U')) 
BEGIN 
   DROP TABLE [Gehalt] 
END 
CREATE TABLE [Gehalt]( 
   [Gehaltsklasse] nvarchar(100) NOT NULL PRIMARY KEY, 
   [Gehalt] money NOT NULL, 



insert into Gehalt (Gehaltsklasse,Gehalt) values('A',2700),('B',7400),('C',2590),('D', 4500);

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[Mitarbeiter]') AND type IN (N'U')) 
BEGIN 
   DROP TABLE [Mitarbeiter] 
END 
GO 

CREATE TABLE [Mitarbeiter]( 
   [Mitarbeiter_id] [int] NOT NULL PRIMARY KEY, 
   [Vorname] nvarchar(100) NOT NULL, 
   [Nachname] nvarchar(100) NOT NULL, 
   [Gehaltsklasse] nvarchar(100) NOT NULL , 
) ON [PRIMARY] 
GO

insert into mitarbeiter (Mitarbeiter_id,vorname,nachname,gehaltsklasse) values
(1,'Hanna','Fredericks','A'),(2,'Mike','Franke','B'),(3,'Achim','Gregorios','A'),(4,'Holger','Jolandos','Y'),
(5,'Richie','Retorius','X'),(6,'Anna','Kastner','A'),(7,'Katrin','Lemmes','C'),(8,'Michael','Maier','C')


-- anlegen einer tabellenwertfunktion

IF EXISTS (SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[GibGehaltZurueck]') AND type IN (N'IF')) 
BEGIN 
   DROP FUNCTION dbo.GibGehaltZurueck 
END 
GO 
CREATE FUNCTION dbo.GibGehaltZurueck(@gehaltsklasse AS nvarchar(100))  
RETURNS TABLE 
AS 
RETURN 
   ( 
   SELECT * FROM gehalt where gehaltsklasse = @gehaltsklasse   
   ) 
GO 

-- END TABELLEN U. FUNKTION ERZEUGEN HIER 


Im folgenden werden die Tabellen aufgelistet um die Inhalte zu verstehen. Die Tabelle Mitarbeiter enthält die jeweiligen Mitarbeiter mit einer Mitarbeiterid, Vornamen und Nachnamen sowie einer zugeordneten Gehaltsklasse. In der Tabelle Gehalt, befinden sich die Datensätze, die das Gehalt das der jeweiligen Gehaltsklasse zugeordnet ist repräsentieren. Also alle Mitarbeiter der Gehaltsklasse A haben demnach ein Gehalt von 2700,--.

Die Tabellenwertfunktion GibGehaltZurueck ermittelt den Gehaltsbetrag entsprechend der im Parameter der Funktion übergebenen Gehaltsklasse.

-- START Auflistung der Tabellen u. Einsatz der Funktion GibGehaltZurueck
select * from Mitarbeiter
select * from Gehalt
select * from dbo.GibGehaltZurueck('A')
-- END Auflistung der Tabellen u. Einsatz der Funktion GibGehaltZurueck


Um das Gehalt eines Mitarbeiters festzustellen bedarf es keiner Funktion da eine normale Verjoinung der Tabellen Mitarbeiter und Gehalt über die Spalte Gehaltsklasse ausreichen würde.

-- START ein normaler Join ermittelt ohne weiteres das der Gehaltsklasse zugeordnete Gehalt
select vorname,nachname,gehalt.Gehaltsklasse, Gehalt 
from mitarbeiter inner join gehalt 
on (mitarbeiter.Gehaltsklasse = gehalt.Gehaltsklasse)

select vorname,nachname,gehalt.Gehaltsklasse, Gehalt 
from mitarbeiter left outer join gehalt 
on (mitarbeiter.Gehaltsklasse = gehalt.Gehaltsklasse)
-- END ein normaler Join ermittelt ohne weiteres das der Gehaltsklasse zugeordnete Gehalt


Was aber wenn eine Tabelle auf der linken Seite mit einer Funktion auf der rechten Seite verknüpft werden soll oder der Funktion Parameterwerte aus einer Spalte der Linken Tabelle übergeben werden sollen.

Beispiel1:

-- eine Funktion kann auch auf der einen Seite der Join Verknüpfung stehen ABER !!! ...
select vorname,nachname,gehalt.Gehaltsklasse, Gehalt 
from mitarbeiter m inner join dbo.GibGehaltZurueck('A') 
gehalt on (1=1)


ABER!!!

Beispiel2:
-- es kann dem Parameter der Funktion kein Spaltenwert (gehaltsklasse)
-- aus der Tabelle der linken Seite der Join Verbindung übergeben werden. FEHLER!!!

-- dieses Beispiel führt zu einem Fehler
SELECT * FROM Mitarbeiter m 
inner join dbo.GibGehaltZurueck(m.gehaltsklasse) on 1=1
GO 

DAZU WIRD CROSS APPLY oder OUTER APPLY BENÖTIGT!!!

CROSS APPLY

Im folgenden Statement wird von jedem Mitarbeiterdatensatz der linken Tabelle Mitarbeiter, der Spaltenwert Gehaltsklasse mittels m.Gehaltsklasse an den Funktionsparameter der Funktion GibGehaltZurueck auf der rechten Seite übergeben.

Liefert die Funktion gefundene Datensätze zurück werden die Mitarbeiterdatensätze inkl. der durch die Funktion zurückgegebenen Datensätze ausgegeben. Liefert die Funktion keine Datensätze entsprechend dem übergebenen Parameterwert zurück werden keine Datensätze auch nicht der Datensatz des Mitarbeiters aus der Tabelle Mitarbeiter zurückgegeben. Ähnlich wie INNER JOIN bei Verjoinung von zwei Tabellen.

OUTER APPLY

Zeigt auf jeden Fall die Datensätze der Linken Seite also die Datensätze der Tabelle Mitarbeiter an. Auch wenn die Funktion auf Grund der übergebenen Gehaltsklasse m.Gehaltsklasse keine Daten zurückliefert. Ähnlich wie LEFT OUTER JOIN bei Verjoinung von zwei Tabellen.

-- Funktioniert
SELECT * FROM Mitarbeiter m 
CROSS APPLY dbo.GibGehaltZurueck(m.Gehaltsklasse) 

-- Funktioniert
SELECT * FROM Mitarbeiter m 
OUTER APPLY dbo.GibGehaltZurueck(m.Gehaltsklasse) 


-- ENDE--

Hier der Link zum Youtube Video https://youtu.be/5VE_j6sT4EM






Samstag, 4. November 2017

Starten von SQL Server Setup - This SQL Server media does not Support the language of the OS-

Beim Versuch SQL Server Setup zu starten erhalten Sie folgenden Fehler:

-This SQL Server media does not Support the language of the OS-

Dies bedeutet soviel wie, dass SQL Server mit den Regionalen Spracheinstellungen Ihres Betriebssystems nicht klar kommt und dies nicht unterstützt.

In unserem Fall hier verwenden wir das Windows Server 2016 Betriebssystem auf dem SQL Server installiert werden soll. Das SQL Server Setup selbst ist allerdings in der Sprache -Deutsch-.

Das ist das Problem, welces die folgende Fehlermeldung erzeugt.

Abbildung 1

 -This SQL Server media does not Support the language of the OS- erscheint, Setup bricht ab.


Abbildung 2

Um das Problem zu lösen Starten sie die Systemsteuerung und klicken Sie auf den Link -Region- 

Anschließend wählen Sie aus der Listbox die Sprache aus, die auch dem SQL Server Setup selbst zugeordnet ist. In diesem Fall hier war das Serverbetriebssystem in -Englisch- und das SQL Server Setup n -Deutsch-. Demzufolge muss in der Listbox unter Format  German (Germany) ausgewählt werden und Ok geklickt werden. 


Abbildung 3


Anschließend startet SQL Server Setup problemlos.





Donnerstag, 19. Oktober 2017

SharePoint App Unterstützung einrichten.

SharePoint App Unterstützung einrichten.

Zum Original Youtube unterstützungsvideo geht's hier:

https://youtu.be/vGe3Iw_wC4c



Leider sind Apps oder SharePoint Addins nicht per Standard in SharePoint aktiviert.

Folgende Vorgehensweise ist nötig.

Zuerst muss überprüft werden, ob in der SharePoint Farm die jeweiligen Dienste laufen.

Hierzu starten Sie die Zentraladministration und wählen folgenden Menüpunkt aus:

Systemeinstellungen->Dienste auf dem Server verwalten
System Settings->Manage Services on Server

(english)
App Management Service
Microsoft SharePoint Foundation Subscription Settings Service

(deutsch)
App-Verwaltungsdienst 
Microsoft SharePoint Foundation-Abonnementeinstellungendienst

Beide Dienste müssen gestartet sein.
Both Services must be started.


Anschließend werden für beide Services die Dienstinstanzen inkl. der zugehörigen Proxys eingerichtet. 
Es wird dringenst empfohlen dies per Powershell durchzuführen, da die Implementierung über die grafische Oberfläche unzureichend ist und nicht zum Ziel führt.

Hierzu starten Sie die Verwaltungsshell in der SharePoint Windows Gruppe im Start Menü (SharePoint 2016 Management Shell)


Hier die POWERSHELL Skripte um beide Dienstinstanzen einzurichten:

#Microsoft SharePoint Foundation-Abonnementeinstellungendienst

$account = Get-SPManagedAccount "virtualxpert\sp_admin" 
$appPoolSubSvc = New-SPServiceApplicationPool -Name SettingsServiceAppPool -Account $account
$appSubSvc = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $appPoolSubSvc -Name SettingsServiceApp -DatabaseName dbapp1
$proxySubSvc = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $appSubSvc


# APP VERWALTUNGSDIENST

$account = Get-SPManagedAccount "virtualxpert\sp_service" 
$appPoolAppSvc = New-SPServiceApplicationPool -Name AppServiceAppPool -Account $account
$appAppSvc = New-SPAppManagementServiceApplication -ApplicationPool $appPoolAppSvc -Name AppServiceApp -DatabaseName AppServicedb1
$proxyAppSvc = New-SPAppManagementServiceApplicationProxy -ServiceApplication $appAppSvc
# Creates a proxy for the Application Management service application.




DNS Einstellungen


Nachdem beide Skripte fehlerfrei gelaufen sind benötigen Sie im DNS Service einen CNAME Eintrag unter dem die Apps aufgerufen werden können.

Hierzu gehen Sie in die DNS Server Verwaltungskonsole und klicken mit der rechten Maustaste auf die Zone.
In unserem Beispiel virtualxpert.com

Im Kontextmenü wählen Sie -New Alias  (CNAME)... aus:
Im Feld -Alias Name- geben Sie einen * ein.
Im Feld -Voll qualifizierter Domain name - wählen Sie über die Suchen Schaltfläche die FQDN aus und weisen diese zu. 
Bestätigen Sie dies mit Ok.

Anschließend überprüfen Sie die Einstellungen mittels ping Befehl.


Einstellungen in der Zentraladministration


1. Klicken Sie in der Zentraladministration auf Apps
2. Wählen Sie dann Configure App Url's
3. Im Feld -App Domain- geben Sie Ihre Domain an (in unserem Beispiel virtualxpert.com)
4. Im Feld -App Prefix- geben Sie ein Kürzel (Prefix) an welches Ihrer App Url automatisch hinzugefügt wird.


AppStore einrichten

Anschließend müssen Sie einen App Catalog einrchten in dem Ihre Apps abgelegt werden können damit User diese hinzufügen können.

In der Zentraladministration gehen Sie auf -Manage App Catalog-
Hier legen Sie unter einer Url einfach einen App Catalog an.
Im Prinzip ist dies eine SharePoint Website die sämtliche App's die Sie im Unternehmen zur Verfügung stellen möchten gespeichert hat.











Was ist SharePoint? Kurz erklärt für Führungskräfte.

Hier der Link zum offiziellen Youtube Video