je voudrais récupérer dans une procédure stockée, le path où se trouvent les fichiers .mdf, .ldf de ma base courante...
merci de m'indiquer une solution en T-SQL si elle existe bien sûr !
Milas
Merci...
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin exact dans la base de registre or ma PS est écrite pour être lancée sur des serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est lancée pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme path sans devoir le mettre en dur à chaque utilisation comme je le fais actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE') SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' WITH REPLACE, MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'', MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!
Merci...
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans
une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin exact
dans la base de registre or ma PS est écrite pour être lancée sur des
serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est lancée
pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme
path sans devoir le mettre en dur à chaque utilisation comme je le fais
actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE')
SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER +
'BACKUPBackup de ' + @DB_MODELE +'.BAK''
RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER +
'BACKUPBackup de ' + @DB_MODELE +'.BAK''
WITH REPLACE,
MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'',
MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin exact dans la base de registre or ma PS est écrite pour être lancée sur des serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est lancée pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme path sans devoir le mettre en dur à chaque utilisation comme je le fais actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE') SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' WITH REPLACE, MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'', MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!
lionelp
dans la registry il y a un chemin par défaut des data files dans sysaltfiles il y a le chemin complet jusqu'au nom de fichier (data ou log file) que manque-t-il? peut-être cela: select name, reverse(substring( rtrim(ltrim(reverse(filename))), patindex('%%',reverse(rtrim(ltrim(filename))))+1, datalength(ltrim(reverse(filename))))), filename from sysaltfiles
Cordialement, LionelP
"Milas" wrote in message news:
Merci...
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin
exact
dans la base de registre or ma PS est écrite pour être lancée sur des serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est
lancée
pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme path sans devoir le mettre en dur à chaque utilisation comme je le fais actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE') SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' WITH REPLACE, MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'', MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!
dans la registry il y a un chemin par défaut des data files
dans sysaltfiles il y a le chemin complet jusqu'au nom de fichier (data ou
log file) que manque-t-il? peut-être cela:
select name, reverse(substring(
rtrim(ltrim(reverse(filename))),
patindex('%%',reverse(rtrim(ltrim(filename))))+1,
datalength(ltrim(reverse(filename))))),
filename
from sysaltfiles
Cordialement,
LionelP
"Milas" <Milas@discussions.microsoft.com> wrote in message
news:38DD99CF-417C-4E7B-ABD3-14FF9D04BAA8@microsoft.com...
Merci...
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans
une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin
exact
dans la base de registre or ma PS est écrite pour être lancée sur des
serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est
lancée
pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme
path sans devoir le mettre en dur à chaque utilisation comme je le fais
actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE')
SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER +
'BACKUPBackup de ' + @DB_MODELE +'.BAK''
RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER +
'BACKUPBackup de ' + @DB_MODELE +'.BAK''
WITH REPLACE,
MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'',
MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!
dans la registry il y a un chemin par défaut des data files dans sysaltfiles il y a le chemin complet jusqu'au nom de fichier (data ou log file) que manque-t-il? peut-être cela: select name, reverse(substring( rtrim(ltrim(reverse(filename))), patindex('%%',reverse(rtrim(ltrim(filename))))+1, datalength(ltrim(reverse(filename))))), filename from sysaltfiles
Cordialement, LionelP
"Milas" wrote in message news:
Merci...
mais ce que je veux ce n'est pas juste avoir l'info... mais récupérer dans une variable varchar le chemin (path) de mes fichiers .mdf et.ldf
par exemple, pour récupérer le nom de la base, je peux faire un simple
SET @name = db_name()
sans passer par master..xpregread parce que là on doit avoir le chamin
exact
dans la base de registre or ma PS est écrite pour être lancée sur des serveurs différents.
En gros je dois récupérer le path de la base sur laquelle la proc est
lancée
pour créer une nouvelle base (basée sur un modèle déjà créé) dans le meme path sans devoir le mettre en dur à chaque utilisation comme je le fais actuellement pour D:MSSQLMSSQL :
SET @DB_MODELE = isnull(@DB_MODELE, 'MODELE') SET @DB_FOLDER = isnull(@DB_FOLDER, 'D:MSSQLMSSQL')
exec ('BACKUP DATABASE ' + @DB_MODELE + ' TO DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' RESTORE DATABASE '+ @DB_NAME +' FROM DISK = ''' + @DB_FOLDER + 'BACKUPBackup de ' + @DB_MODELE +'.BAK'' WITH REPLACE, MOVE ''DB_data'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'.MDF'', MOVE ''DB_log'' TO '''+ @DB_FOLDER + 'Data' + @DB_NAME +'_log.LDF''')
Voilà... en espérant avoir été clair dans mes explications !!