2016-01-13 55 views
2

我想將下面的腳本提供給我的客戶端以安裝新的數據庫。
我怎麼可以重寫劇本的這一部分,以反映他們的具體數據和日誌文件的位置:如何在SQL腳本中定義mdf,ldf文件默認位置路徑

USE [master] 
GO 
/****** Object: Database [PhoneBook] Script Date: 2016/1/13 11:02:34 AM ******/ 
CREATE DATABASE [PhoneBook] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'PhoneBook', FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\PhoneBook.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'PhoneBook_log', FILENAME = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\PhoneBook_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
GO 

我的客戶端的Windows驅動器是不是c。
我可以更改這些路徑來反映他們的SQL安裝路徑嗎?
我如何告訴腳本找到正確的位置?

+0

什麼叫**我可以改變這些絕對行程s ** – Hiten004

+0

意思的意思是在T-SQL更換此%贏%或類似的東西,還是有任何命令給數據文件夾路徑? – MoonLight

回答

2
USE [master] 
GO 

DECLARE @mdfPath NVARCHAR(max), @ldfPath NVARCHAR(max) , @SQL NVARCHAR(MAX), @instName NVARCHAR(max) = 'PhoneBook' 


SELECT @mdfPath = SUBSTRING(physical_name, 1,CHARINDEX(N'master.mdf',LOWER(physical_name)) - 1)[email protected]+N'.mdf' 
     ,@ldfPath = SUBSTRING(physical_name, 1,CHARINDEX(N'master.mdf',LOWER(physical_name)) - 1)[email protected]+N'.ldf' 
FROM master.sys.master_files 
WHERE database_id = 1 AND FILE_ID = 1 


SELECT @SQL = 
'CREATE DATABASE [PhoneBook] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'''[email protected]+''', FILENAME = N'''[email protected]+''' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'''[email protected]+'_log'', FILENAME = N'''[email protected]+''' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)' 

PRINT(@SQL) 
EXECUTE(@SQL) 

GO 
+0

我應該接受哪個答案?多謝你們! – MoonLight

+0

顯然我會說我的去;) –

+1

去我的。我解釋了我做了什麼:) –

2

對於SQL Server 2012及更高版本,只要它們的默認數據和日誌文件目錄設置在服務器級別,就可以使用這些服務器屬性,如here所示。你可以做這樣的事情使用動態SQL:

USE [master] 
GO 

DECLARE @defaultDataPath NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), SERVERPROPERTY('InstanceDefaultDataPath')) 
DECLARE @defaultLogPath NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), SERVERPROPERTY('InstanceDefaultLogPath')) 
DECLARE @sql NVARCHAR(MAX) = 

'CREATE DATABASE [PhoneBook] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N''PhoneBook'', FILENAME = N''' + @defaultDataPath + 'PhoneBook.mdf'' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N''PhoneBook_log'', FILENAME = N''' + @defaultLogPath + 'PhoneBook_log.ldf'' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) ' 

PRINT @sql 
EXEC (@sql) 
+1

去我的。我解釋了我做了什麼:) –

相關問題