xp_cmdshell scheint sich aufzuhängen

Posted on Jul 13, 2004 von in SQL Server

Man sollte keine Befehle mit xp_cmdshell ausführen, die irgendeine Interaktion mit dem Benutzer erwarten. Diese warten dann auf irgendwelche Aktionen seitens des Benutzer, die nicht stattfinden und scheinen sich *aufgehängt* zu haben.
Ein Bespiel hierfür ist:

Ganze Geschichte »

Indexes mit Tabellen und Filegroups mappen

Posted on Jul 13, 2004 von in SQL Server
SELECT      
 CAST(OBJECT_NAME(sysind.id) AS CHAR(20)) AS TableName
 , CAST(sysind.name AS CHAR(30)) AS IdxName
 , CAST(sysfg.groupname AS CHAR(10)) AS GroupName
FROM 
 sysindexes  sysind    
INNER JOIN 
 sysfilegroups sysfg
ON 
 sysind.groupid = sysfg.groupid
 INNER JOIN 
  sysobjects sysobj
 ON 
  sysind.id = sysobj.id
WHERE 
 sysobj.xtype <> 'S' 
AND 
 sysind.name NOT LIKE '_WA%' 
ORDER BY
 TableName

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)

Verwendung eines Index erzwingen

Posted on Jul 13, 2004 von in SQL Server
USE pubs
GO
SELECT au_lname FROM authors (index=aunmind)

Ganze Geschichte »

Monatsultimo ermitteln

Posted on Jul 13, 2004 von in SQL Server

Die Ermittlung bestimmter Tage taucht in dieser oder jener Form immer mal wieder auf. T-SQL bietet hierfür sehr wirkungsvolle Methoden an:

Ganze Geschichte »

Erster und letzter Tag eines Jahres

Posted on Jul 13, 2004 von in SQL Server
DECLARE @dt DATETIME
SET @dt = GETDATE()
SELECT
CAST(CAST(YEAR(@dt) AS CHAR(4))+'0101' AS DATETIME)
AS Jahresanfang
, CAST(CAST(YEAR(@dt) AS CHAR(4))+'-12-31T23:59:59.997' AS DATETIME)
AS Jahresende

Jahresanfang Jahresende
------------------------------------------------------ ------------------------
2004-01-01 00:00:00.000 2004-12-31 23:59:59.997

(1 row(s) affected)

Ganze Geschichte »

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 »

Median berechnen

Posted on Jul 13, 2004 von in SQL Server

Es gibt anscheinend unterschiedliche Meinungen über die Berechnung des Median. Zum einen gibt es den 'financial' Median, der das arithmetische Mittel der beiden mittleren Werte ist, zum anderen den 'statistischen' Median, der der niedrigere (bzw. bei Gleichheit der Werte) der erste der Werte ist. In Büchern über T-SQL findet man die komplexesten Statements zur Berechnung des Median, dabei ist dieser sehr einfach mit Hilfe von TOP n PERCENT zu berechnen. Hier ist ein Beispiel zur Berechnung des 'financial' Medians:

Ganze Geschichte »