Archive for the ‘MSSQL Server’ Category
SQL Server “A network-related or instance-specific error occurred”

Nach der Installation eines SQL Servers (in meinem Fall 2008 R2 auf einem Windows 2008 R2 x64 Server) erhält man beim Versuch einen Remoteverbindung über das SQL Server Management Studio herzustellen in der Regel folgende Fehlermeldung:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)

Der Grund dafür ist recht simpel. Die Windows Firewall blockt den Port für den SQL Server (1433). Leider sieht die Installation noch immer nicht vor den Port im Laufe der Installation öffnen zu lassen. Man kann sich nun entweder durch die Windows Firewall GUI klicken oder einfach folgenden Befehl in einer CMD Box (muss als Admin ausgeführt werden!) eingeben:

netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT

image

Thats it. Der nächste Verbindungsversuch führt zum Erfolg :-) .

MS SQL 2008 (R2) Export in eine normale Datei mit Create und insert statements

Nachdem der Microsoft SQL Database Publishing Wizard für SQL Server 2008 (R2) Systeme nicht mehr verfügbar ist um die Datenbank und deren Inhalt in eine Datei mit SQL Statements zu transferieren (siehe alter Beitrag), war ich heute auf der Suche nach einem neuen Weg. Fündig wurde ich dabei direkt im Microsoft SQL Server Management Studio (ein sehr guter Platz dafür :-) . Die notwendigen Schritte sind dabei recht einfach:

1. Rechtsklick auf die zu exportierende Datenbank –> Tasks –> Generate Scripts…

image

2. Auswahl der zu exportierenden Elemente (in meiner DB gibt es derzeit nur Tables und Stored Procedures – daher stehen bei mir auch nur diese beiden Elemente zu Auswahl).

image

3. Setzen der Ouput Options. Da ich wenige Daten habe, lasse ich die Ausgabe direkt in ein query window schreiben.

Wichtig noch nicht Next klicken.

image

4. Auswahl von Advanced und hier bei “Types of data to script” die Option Schema and data auswählen. (Das ist nicht default!!). In dieser Ansicht kann man auch noch weitere Dinge setzen die ganz nützlich sind. Ich setzte z. B. gerne noch die Optionen Script DROP and CREATE und Script USE DATABASE.

image

Thats it. Noch zwei mal Next klicken und schön öffnet sich ein neues Fensterchen mit den SQL Commands.

MSSQL String in RTF wandeln

… und noch eine SQL Funktion aus meiner Sammlung. Diese Funktion ermöglicht das Umwandeln eines normalen Strings in ein RTF “Objekt” direkt auf der Datenbank.

-- Diese SQL Query erstellt eine neue Funktion mit dem Namen string2rtf. Die Funktion hat zur Aufgabe einen übergebenen String
-- in ein RTF Objekt umzuwandeln.
-- @param String enthält den Rohstring
-- @return rtfstring enthält den string plus die rtf Erweiterungen
if exists (select * from information_schema.routines where routine_name = N'string2rtf' and routine_type = 'function') drop function [dbo].[string2rtf]
GO
CREATE FUNCTION dbo.string2rtf(@string varchar(8000))
returns varchar(8000)
AS
BEGIN
DECLARE @praefix varchar(200)
DECLARE @suffix varchar(200)
DECLARE @rtfstring varchar(8000)
SET @praefix = '{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\f0\fs17 '
SET @suffix = '\par}'
SET @rtfstring = NULL
SET @rtfstring = @praefix + @string + @suffix;
SET @rtfstring = REPLACE(@rtfstring,CHAR(9),'\tab ');
SET @rtfstring = REPLACE(@rtfstring,CHAR(13) + CHAR(10),'\par ');
SET @rtfstring = REPLACE(@rtfstring,CHAR(13),'\par ');
SET @rtfstring = REPLACE(@rtfstring,CHAR(10),'\par ');
SET @rtfstring = REPLACE(@rtfstring,'ä','\''e4');
SET @rtfstring = REPLACE(@rtfstring,'Ä','\''c4');
SET @rtfstring = REPLACE(@rtfstring,'ü','\''fc');
SET @rtfstring = REPLACE(@rtfstring,'Ü','\''dc');
SET @rtfstring = REPLACE(@rtfstring,'ö','\''f6');
SET @rtfstring = REPLACE(@rtfstring,'Ö','\''d6');
SET @rtfstring = REPLACE(@rtfstring,'ß','ss');
SET @rtfstring = REPLACE(@rtfstring,'€','\''80');
return @rtfstring
end
MSSQL Export in eine normale Datei mit create und insert statements

… was für ein Tag. Mein Plan war es heute mal schnell eine bestehende Datenbank in eine andere Datenbank zu kopieren. Von den Datenbanksystemen mit denen ich bis jetzt gearbeitet habe (MySQL und Oracle) her war ich es gewohnt, dies mit wenigen Schritten erledigen zu können.

Nicht so bei MSSQL – weder die Management Konsole für jeden (SSMSE) noch der große Bruder (SSMS) bieten eine vernüftige Funktion um die Daten einfach in ein lesbares Format zu exportieren.

Nach etwas suchen bin ich dann auf ein weiters Tool von Microsoft aufmerksam gemacht worden. Der Microsoft SQL Server Database Publishing Wizard bietet genau die von mir gewünschte Funktionalität und ist kinderleicht zu bedienen.

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”.