Archive for the ‘Scripts’ Category
Excel Macros zum entfernen von zeilenumbrüchen, nutzlosen Leerzeichen etc

Nachdem ich in den letzten Tagen einen Teil meiner SQL Scripts veröffentlicht habe, mache ich jetzt mal mit ein paar Macros weiter. Die nachfolgend aufgeführten Macros sind für Excel bestimmt und sollen einem Admin helfen Daten für die Weiterverarbeitung z. B. mit S-Verweisen (v-lookups) oder für den Upload in eine Datenbank aufzubereiten.

Diese Funktion entfernt Zeilenumbrüche aus dem markierten Bereich:

Sub entfernen_zeilenumbrueche()
Dim c As Object
For Each c In Selection
c.Value = Replace(c.Value, Chr(10), "")
Next
End Sub

Diese Funktion wandelt im markierten Bereich Zeilenumbrüche in RTF Zeilenumbrüche (\par) um:

Sub zeilenumbrueche2rtf()
Dim c As Object
For Each c In Selection
c.Value = Replace(c.Value, Chr(10), "\par")
c.Value = Replace(c.Value, Chr(11), "\par")
c.Value = Replace(c.Value, Chr(13), "\par")
Next
End Sub

Diese Funktion ersetzt etwas ausergewöhnliche Hochkommas durch “normale” im markierten Bereich:

Sub replace_strange_chars()
Dim c As Object
For Each c In Selection
'Entfernen von komischen Hochkommas
c.Value = Replace(c.Value, Chr(191), Chr(39))
Next
End Sub

Wie der Name sagt, werden hier ein paar Sonderzeichen für einen Upload in eine MSSQL Datenbank escaped (im markierten Bereich):

Sub escape_mssql_string()
Dim c As Object
For Each c In Selection
'Escapen von Hochkommas
c.Value = Replace(c.Value, Chr(39), Chr(39) + Chr(39))
Next
End Sub

Sehr sehr nützliche Funktion. Im markierten Bereich werden alle Leerzeichen am Anfang und am Ende eines Strings entfernt. Leerzeichen im Text werden nicht entfernt:

Sub remove_useless_spaces()
Dim c As Object
For Each c In Selection
c.Value = Application.WorksheetFunction.Clean(Trim(c.Value))
Next
End Sub

Viel Spass mit den Funktionen

MSSQL Split bzw. explode function

Ich hatte die letzten Monate über das Vergnügen mein etwas eingestaubtes SQL Wissen wieder auffrischen zu dürfen. Als Folge dessen sind ein paar SQL snippets entstanden die u. U. auch jemandem anderen im Netz helfen könnten.

Als erstes möchte ich eine Funktion mit euch Teilen welche es ermöglicht einen übergebenen String anhand eines Trennzeichens zu zerlegen. Die Funktion ist sehr hilfreich wenn man Daten aus einer Datenbank ziehen muß bei der die Entwickler der Meinung waren, dass es Klug ist bestimmte Informationen einfach nur z. B. durch pipes getrennt in ein varchar Feld zu schreiben…

-- Die Funktion zerlegt einen String anhand eines Trennzeichens und gibt einen definierbaren Teilstring zurück.
-- @param String der zu zerlegenden String
-- @param Delimiter das Trennzeichen anhand dessen der String zerlegt wird
-- @param returnItem die Nummer des Objektes welches zurück gegeben werden soll
-- @return returnslice der Rückgabewert - wenn nichts gefunden wird ist dieser "Null"
-- ChangeLog:
-- 20090505: Erste Version erstellt von Johannes Schmidt (Security-Blog.eu)

if exists (select * from information_schema.routines where routine_name = N'split' and routine_type = 'function') drop function [dbo].[split]
GO
CREATE FUNCTION dbo.split(@String varchar(8000), @Delimiter varchar(12), @returnItem int)
returns varchar(8000)
AS
BEGIN

declare @id int
declare @idx int
declare @slice varchar(8000)
declare @returnslice varchar(8000)

set @id = 0
set @idx = 1
set @returnslice = null

while @idx!= 0
begin
set @id = @id + '1'
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String

if @id = @returnItem set @returnslice = @slice

set @String = SUBSTRING(right(@String,len(@String) - @idx),len(@Delimiter) + 1, len(@String))
if len(@String) = 0 break
end
return @returnslice
end

Anwendungsbeispiel:

Select split('Ich bin ein Test', ' ', 2)

Der Rückgabewert wäre hier “bin”.

MSSQL stored procedures, views und functions erstellen

So nachdem ich in letzter Zeit gezwungen wurde wieder ein paar Dinge zu entwickeln verwende ich den Blog jetzt einfach auch mal dafür um SQL Statements für mich abzulegen (braucht man ja alle paar Jahre mal wieder ;) ). Vielleicht gibts hier im Netz ja noch den einen oder anderen, der genau diese Info auch sucht…

Erstellen einer stored procedure (inkl. löschen wenn diese bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    dbo.sysobjects
  WHERE
    id = object_id(N'[dbo].[SP_NAME]')
  AND
    OBJECTPROPERTY(id, N'IsProcedure') = 1
  )

DROP PROCEDURE [dbo].[SP_NAME]

GO

CREATE PROCEDURE [dbo].[SP_NAME]

WITH
EXECUTE AS CALLER
AS

...

Erstellen eines views (inkl. löschen wenn dieser bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    dbo.sysobjects
  WHERE
    id = object_id(N'[dbo].[VIEW_NAME]')
  AND
     OBJECTPROPERTY(id, N'IsView') = 1
  )
DROP VIEW [dbo].[VIEW_NAME]
GO

CREATE VIEW [dbo].[VIEW_NAME]
AS
...

Erstellen einer function (inkl. löschen wenn diese bereits vorhanden ist):

if exists
  (
  SELECT
    *
  FROM
    information_schema.routines
  WHERE
    routine_name = N'FUNKTIONS_NAME'
  AND
    routine_type = 'function'
  ) 

DROP FUNCTION [dbo].[FUNKTIONS_NAME]

GO

CREATE FUNCTION dbo.FUNKTIONS_NAME()
BEGIN
...
END

Grundsätzlich sind die msdn Webseiten zum SQL Server 2008 sehr hilfreich um die genaue Syntax von einzelnen Funktionen zu finden.