SQL-Server2005:

13/11/2008 - 12:30 von Kurt Langeder | Report spam
Hallo Newsgroup!

Ich habe da ein Problem mit einem SQL-Statement und zwar mit der
'Anzahl der Hochkommas' im MOVE-Abschnitt.

Ich möchte eine gesicherte Datenbank (BACKUP DATABASE) unter einem
neuen Namen
einfügen. Wenn ich im MOVE-Abschnitt den fixen Namen (z.B.
'C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DB_Neu.MDF')
angebe, funktioniert das SQL-Statement. Mit dem variablen Namen
@data_path geht's aber nicht.

Mein SQL-Statement:

DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1,
CHARINDEX('master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files
WHERE database_id = 1 AND file_id = 1);

RESTORE DATABASE DB_Neu FROM DISK = 'C:\DB\DB_Neu.BAK'
WITH
MOVE 'DB' TO ''' + @data_path + 'DB_Neu.MDF'',
MOVE 'DB_log' TO ''' + @data_path + 'DB_Neu_log.ldf''


Fehlermeldung vom SQL-Server:
Meldung 102, Ebene 15, Status 1, Zeile 9
Falsche Syntax in der Nàhe von 'DB_Neu'.

Das MOVE-TO-Ergebnis sollte z.B.
'C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DB_Neu.MDF'
liefern.

Wer kann mir da weiterhelfen?
Danke
Kurt
 

Lesen sie die antworten

#1 Elmar Boye
13/11/2008 - 13:22 | Warnen spam
Hallo Kurt,

Kurt Langeder schrieb:
Ich habe da ein Problem mit einem SQL-Statement und zwar mit der
'Anzahl der Hochkommas' im MOVE-Abschnitt.

Mit dem variablen Namen @data_path geht's aber nicht.



WITH MOVE versteht nur Konstanten, deswegen mußt Du den
Befehl via EXEC ausführen...


Mein SQL-Statement:

DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1,
CHARINDEX('master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files
WHERE database_id = 1 AND file_id = 1);

RESTORE DATABASE DB_Neu FROM DISK = 'C:\DB\DB_Neu.BAK'
WITH
MOVE 'DB' TO ''' + @data_path + 'DB_Neu.MDF'',
MOVE 'DB_log' TO ''' + @data_path + 'DB_Neu_log.ldf''



der RESTORE Teil wàre dann

DECLARE @sql nvarchar(1024)
SET @sql 'RESTORE DATABASE DB_Neu FROM DISK = ''C:\DB\DB_Neu.BAK''
WITH MOVE ''DB'' TO ''' + @data_path + 'DB_Neu.MDF'',
MOVE ''DB_log'' TO ''' + @data_path + 'DB_Neu_log.ldf'''

EXEC(@sql)

Gruß Elmar

Ähnliche fragen