我想将以下脚本提供给我的客户端以安装新数据库 如何重写这部分脚本以反映其特定数据和日志文件位置:
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 :(得分:3)
对于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 :(得分:3)
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)+@instName+N'.mdf'
,@ldfPath = SUBSTRING(physical_name, 1,CHARINDEX(N'master.mdf',LOWER(physical_name)) - 1)+@instName+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'''+@instName+''', FILENAME = N'''+@mdfPath+''' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'''+@instName+'_log'', FILENAME = N'''+@ldfPath+''' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'
PRINT(@SQL)
EXECUTE(@SQL)
GO