Tag: "entwicklung"

IIF in T-SQL

Posted on Jul 13, 2004 von in SQL Server

Dies ist eine oft gestellte Frage in SQL Server Communities. Die Antwort lautet...

Ganze Geschichte »

2 Kommentare »

Nachtrag zum Datetime Datentypen

Posted on Jul 13, 2004 von in SQL Server


Die anderen 4 Byte speichern die Tageszeit, die als Anzahl der Millisekunden seit Mitternacht dargestellt wird.

Dies kann man in der Januar 2004 Edition von BOL  nachlesen.

Ganze Geschichte »

Der DATETIME Datentyp

Posted on Jul 13, 2004 von in SQL Server

Der DATETIME Datentyp ist 8 Bytes gross. Die ersten vier Bytes speichern die Anzahl der Tage vor oder nach dem 01.01.1900; die letzten vier Bytes speichern die Anzahl der 'Clock Ticks' seit Mitternacht. Die binäre Darstellung jedes der beiden 4-byte Stücke ist tatsächlich die gleiche die auch für Integer Darstellung benutzt wird. Jede Sekunde besteht aus 300 Ticks, die merkwürdigerweise um ein Vielfaches präziser sind als @@TIMETICKS.

Ganze Geschichte »

Neukompilierung Gespeicherter Prozeduren und SET Optionen

Posted on Jul 13, 2004 von in SQL Server

Original von Tibor Karaszi; deutsche Übersetzung von Frank Kalis

Überblick
Die Verwendung Gespeicherter Prozeduren wird allgemein als gute Praktik betrachtet. Einer der Vorteile Gespeicherter Prozeduren ist deren Vorkompilierung. Dies bedeutet, dass zur Ausführungszeit SQL Server den vorkompilierten Ausführungsplan der Gespeicherten Prozedur aus dem Cache holt und ausführt, falls dieser bereits im Cache vorhanden ist. Dies ist generell schneller als den Code bei jeder Ausführung zu optimieren und kompilieren. Unter bestimmten Umständen jedoch, ist es jedoch notwendig, eine Prozedur während der Ausführung neu zu kompilieren.

Ganze Geschichte »

DDL Skripte generieren

Posted on Jul 13, 2004 von in SQL Server

Original von Tibor Karaszi; deutsche Übersetzung von Frank Kalis

Übersicht
Im folgenden finden Sie verschiedene Techniken und Produkte, die DDL Skripte für Ihre Datenbankobjekte und/oder INSERT Statements für Ihre Daten generieren können.

Zusatzinformation
Ich empfehle, dass Sie DDL wie Quellcode behandeln. Typischerweise bedeutet dies, dass Sie Ihr DDL in Dateiform aufbewahren und generell ein Quellcodeverwaltungsprogramm verwenden, dass Sie Objekte ein- und auschecken lässt und auch in der Lage ist, verschiedene Versionsstände Ihres Datenbankschemas zu verwalten.

Ganze Geschichte »

Der Unterschied zwischen SET und SELECT

Posted on Jul 13, 2004 von in SQL Server

Original von Narayana Vyas Kondreddi; deutsche Übersetzung von Frank Kalis

Traditionell waren SQL Server Datenbankentwickler es gewohnt, SELECT zu verwenden um Werte einer Variablen zuzuweisen. Dies funktionierte einwandfrei und war eine absolut gültige Praktik in SQL Server 6.5. Microsoft veröffentlichte SQL Server 7.0 in 1999. Diese Version führte das SET Statement ein, um Variablen zu initialisieren und Werte zuzuweisen. In der o­nlinedokumentation konnte man ebenfalls nachlesen: "Es ist empfohlen, dass SET @local_variable anstelle SELECT @local_variable verwendet wird zur Variablenzuweisung."

Ganze Geschichte »

Datum in das Format JJJJMMDDHHMMSS bringen

Posted on Jul 13, 2004 von in SQL Server

Eigentlich würde man so eine Aufgabe wahrscheinlich besser im Client code verarbeiten, aber wenn's denn unbedingt der Server sein soll, könnte dies folgendermaßen aussehen:

DECLARE @date DATETIME
SET @date = '19.10.2003 09:48:22'

SELECT
CAST(
CONVERT(CHAR(4), YEAR(@date)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, MONTH(@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DAY(@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(hour, @date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(minute,@date)), 2)) +
CONVERT(CHAR(2), RIGHT('0' + CONVERT(VARCHAR, DATEPART(second,@date)), 2))
AS CHAR(14))

/*oder*/
SELECT
SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(CHAR,@date,120),'-',''),' ',''),':',''),1,14)


--------------
20031019094822

(1 row(s) affected)


--------------
20031019094822

(1 row(s) affected)

Nachtrag 20.09.2004: Offentsichtlich geht es auch noch eine Spur einfacher:

DECLARE @date DATETIME
SET @date = '19.10.2003 09:48:22'
SELECT
REPLACE(REPLACE(REPLACE(CONVERT(CHAR,@date,120),'-',''),' ',''),':','')

-------------------
20031019094822

(1 row(s) affected)

Tage eines Monats

Posted on Jul 13, 2004 von in SQL Server
DECLARE @d DATETIME
SET @d = '31/01/2003 12:00:00'
SELECT
DAY(DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DAY(@d),@d)))) AS TageImMonat

TageImMonat
-----------
31

(1 row(s) affected)

Bei der Wahl des Datumsformat muss man vorsichtig sein. So funktionieren zum Beispiel:

SET @d = '20030131 12:00:00'

und

SET @d = '31.01.2003 12:00:00'

während

SET @d = '2003-01-31 12:00:00'

Server: Nachr.-Nr. 242, Schweregrad 16, Status 3, Zeile 2
Bei der Konvertierung ... char-Datentyps in ... datetime-Datentyp ... außerhalb des gültigen Bereichs.

hervorruft.

Ganze Geschichte »