SQL Alter Database klappt nicht

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.075
Ich versuche durch einen Script (keine Prozedur) die Datenbanknamen zu ändern.

Irgendwie klappt es doch nicht. Wo habe ich falsch gemacht?

Code:
USE [master]

--neue Name der alter Datenbank
DECLARE @oldfile NVARCHAR(MAX);
--gesamtlänge des String mit der Angabe der Datenbank.
DECLARE @len INT;
--alte Name der alter Datenbank, ungekürzt ungeändert.
DECLARE @fullname NVARCHAR(MAX);

SET @fullname = (SELECT physical_name FROM sys.master_files WHERE name = 'test');

SET @len = LEN(@fullname);

SET @oldfile = SUBSTRING(@fullname,1, @len - 4) + CONVERT(NVARCHAR(10), GETDATE(), 112) + '.mdf';

--SELECT @oldfile AS NEWNAME, @fullname AS OLDNAME, @len OLDLEN;

IF NOT EXISTS (SELECT * FROM sys.master_files WHERE name = 'test')
BEGIN
	CREATE DATABASE test;

	-- Verify the database files and sizes
	SELECT * 
	FROM sys.master_files
	WHERE name = 'test'
END
ELSE
BEGIN	
	ALTER DATABASE test
	MODIFY FILE 
	(
    NAME = test20100804,
    FILENAME = @oldfile    <<<------ Hier habe ich fehlermeldung
	)
END

HTML:
Meldung 102, Ebene 15, Status 1, Zeile 34
Falsche Syntax in der Nähe von '@oldfile'.

Kennst sich da jemand aus? Eigentlich sollte alles funktionieren.
 
Ist zwar nur ne Vermutung, da ich damit nicht so vertraut bin, aber fehlt da nicht ein ; ?
 
Ne ich habe jetzt herausgefunden wo es liegt....

muss man beim FILENAME noch mit Hochkomma Übergeben. Habe aber jetzt ein neues Problem.

HTML:
Meldung 5121, Ebene 16, Status 1, Zeile 30
Der von "' + @oldfile + '" angegebene Pfad ist kein gültiges Verzeichnis.

Der Pfad ist 100% Korrekt. Wieso sollte das nicht gehen?
 
Lass dir den Pfad doch mal ausgeben, dann siehst dus gleich ;)
Eventuell fehlt nur der '\' am Ende

@AlbertLast
Guter Einwand, aber irgendwie hat ich sofort MS SQL im Kopf o_O dabei hab ich PL/SQL eigentlich nur in Oracle benutzt. Hmmm
 
Zuletzt bearbeitet:
Backslash ist doch kein Escape Zeichen oder? Zumindest nicht dass ich wüsste.
Ich benutze MS SQL Server Management Studio 2005 Express.


@oldfile (naja irgendwie falsch gewählt aber jetzt ist es auch egal... ist halt neue Dateiname) ist:
C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test20100804.mdf

@fullname (alte vollständige Dateiname)
C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\test.mdf

Wo liegt jetzt da bitte ein Problem?


EDIT

Bei MSDN steht dass man eventuell die Datenbank abschalten muss. Ich habe schon versucht die Datenbank vom dienst zu nehmen, aber da habe ich das Problem, dass ich die Query gar nicht ausführen kann, da die Datenbank abgeschaltet ist.
Irgendwie ist es widersprüchlich.
 
Zuletzt bearbeitet:
Die Fehlermeldung spricht von Verzeichnis, du gibst ne Datei an. Hmm ich sollt mir das oben doch mal ganz durchlesen ;)

Edit:
Willst du die mdf Datei der aktuellen Datenbank auslesen?
Das wird nicht funktionieren. Ne Datenbank verlangt exklusiven Zugriff auf ihre Dateien.
 
hmm eigentlich brauchte er pfad mit Dateinamen

Hier steht ja alles. Funktioniert aber trotzdem nicht.

EDIT

Tja es ist irgendwie schwer den Hard-Namen zu umbenennen (der auf der Festplatte steht und nicht als Datenbanknamen). Gibt es wirklich keinen Alternativen den namen auf der Festplatte per sql zu ändern?
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben