Monthly Archive for April, 2008

Split Funktion für MSSQL 2000

Kann man immer wieder mal brauchen: Eine Split-Funktion für MSSQL (ab 2000).

CREATE FUNCTION [dbo].[udf_ItemExtract]
(
 @Position INTEGER,
 @List VARCHAR(2000),  --VARCHAR(MAX)
 @Delimiter VARCHAR(1)
)
RETURNS VARCHAR(2000)  --VARCHAR(MAX)
AS
BEGIN
 DECLARE @RetVal VARCHAR(2000) SET @RetVal = ''  --VARCHAR(MAX)
 DECLARE @Counter  INT SET @Counter = 0
 DECLARE @StartPos INT
 DECLARE @Length INT
 DECLARE @DelimPos INT SET @DelimPos = 0
 -- SCAN THROUGH UNTIL WE FIND THE ITEM AT THE POSITION OF THE INDEX - WE'LL GO THROUGH WHILE LOOP AT LEAST ONCE
 WHILE @Counter < @Position
  BEGIN
   SET @Counter = @Counter + 1   -- increment counter
   SET @StartPos = @DelimPos + 1 -- move the start position to right after previously found delimiter (or 1st char if this is the fist time through
   SET @DelimPos = CHARINDEX(@Delimiter,@List,@DelimPos + 1)   --find the next delimiter
   -- IF THERE ARE NO DELIMITERS LEFT...
   IF @DelimPos = 0
   BEGIN
    -- IF WE'RE ON THE POSITION WE'RE LOOKING FOR, THEN SET LENGTH TO THE REST OF THE STRING
    IF @Counter = @Position SET @Length = (LEN(@List)+1)-@StartPos
    -- OTHERWISE SET LENGTH TO -1 AND THAT WILL BE AN INDICATOR TO RETURN EMPTY STRING
    ELSE SET @Length = -1
   END
   ELSE SET @Length = @DelimPos - @StartPos  -- otherwise length is now from new start pos right up to delimiter
  END
  -- RETURN THE EXTRACTED STRING
  IF @Length > 0 SET @RetVal = SUBSTRING(@List,@StartPos,@Length)
  RETURN @RetVal
END

ASP.NET 2 in 30 minutes: Feeds made simple

Newsfeeds können sehr praktisch sein. Schon mal an eine Interaktion von Feed <-> System Management Server oder Feed <-> Domain gedacht?
Ein praktisches Beispiel:
In einem Unternehmen werden regelmäßig Systemhotfixe, Systemupdates, Application Updates etc. verteilt. Dabei sollen die User aber vorher informiert werden damit sie wissen, das ein Update zur Installation ansteht oder das die Performance kurzfristig beeinträchtigt werden kann.
In der Regel gehen dann ellenlange Mails mit (für den User) unverständlichen Informationen durch das Unternehmen.
Man könnte aber auch einen (oder mehrere) zentrale(n) Newsfeed(s) anbieten. Einen für Hotfixe, noch einen für Office-Patches oder auch einen für Updates einer spezifischen Software (Visual Studio meinetwegen).
Großes Gerede, aber was brauchen wir?
Wie benötigen ein wenig ASP.Net 2 Webspace. Wenn vorhanden noch eine SQL-Datenbank, es reicht aber auch wenn man eine Access-Datenbank nutzt.
Dort legt man 2 Tabellen an:

CREATE TABLE Channels (
[id] [int] IDENTITY(1,1) NOT NULL,
[title] [nvarchar](255) NULL,
[description] [ntext] NULL,
[managingeditor] [nvarchar](50) NULL,
[webmaster] [nvarchar](50) NULL);

CREATE TABLE Items(
[id] [int] IDENTITY(1,1) NOT NULL,
[title] [nvarchar](255) NULL,
[description] [ntext] NULL,
[pubdate] [datetime] NULL,
[author] [nvarchar](50) NULL,
[channel] [int] NULL,
[published] [bit] NULL DEFAULT ((0)),
[targetou] [ntext] NULL,
[smscollection] [nvarchar](50) NULL,
[clientlist] [ntext] NULL);

Die Tabellennamen sind selbsterklärend: Channels für die verfügbaren Feeds und Items für alle Nachrichten. Bei der Tabelle Items habe ich 3 Spalten um die Nachrichten genauer zu Verteilen:
In “targetou” kann ein spezifischer LDAP-String eingetragen werden, sodass später nur Clients die Nachricht bekommen die auch Mitglied der OU sind. Gleiches gilt für “smscollection”. Eine eingetragene Collection aus SMS stellt sicher, das nur Clients die in der Collection sind die Nachricht erhalten. Und die Spalte “clientlist” ist für spezifische Rechnerlisten. Dort sollen Semikolonseparierte FQDN-Namen von Rechnern eingetragen werden die die Nachricht erhalten sollen (z.B. zur Definition von Testfeldern).
Continue reading ‘ASP.NET 2 in 30 minutes: Feeds made simple’