【问题标题】:Create different filegroup for different Schema为不同的 Schema 创建不同的文件组
【发布时间】:2014-07-04 18:56:27
【问题描述】:

我需要为我在 SQL Server 中的架构创建一个文件组。数据库是空的,我只想创建架构及其文件组。

我该怎么做?

【问题讨论】:

  • 如果这是问题,您无法在不创建数据库的情况下创建架构。在创建您自己的数据库时,您可以为您的数据库指定文件位置。那么,请指定您想要达到的目标:用于创建具有文件位置的数据库的脚本、创建单一模式还是其他?
  • 寻找脚本来创建文件组并向它们添加特殊的架构。

标签: sql-server tsql schema filegroup


【解决方案1】:

如果我正确理解您的问题,您希望在特定架构中创建的任何对象也添加到特定文件组中。

AFAIK 这不可能开箱即用 - 有一个 Connect ticket 请求此功能。

另一个想法是here,即使用DDL triggers,它将防止给定架构中的对象在指定文件组以外的任何地方创建。

【讨论】:

  • 不,我不想自动执行!我怎么能自己做呢?
【解决方案2】:

您可以使用手动指定的名称创建数据库文件组:MY_DB_NAME_Data.MDF、MY_DB_NAME_Log.LDF 等(对于 SQL Express,请搜索 c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ ):

DECLARE @sqlcmd nvarchar(1000);
DECLARE @phys_path nvarchar(1000);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @db_name nvarchar(1000);

SET @db_name = N'MY_DB_NAME';

SET @ParmDefinition = N'@phys_pathOUT varchar(1000) OUTPUT';
SET @sqlcmd = 'SELECT @phys_pathOUT = SUBSTRING(physical_name, 1, CHARINDEX('+CHAR(39)+'master.mdf'+CHAR(39)+', LOWER(physical_name)) - 1) 
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1'
DECLARE @CREATE_DATABASE_TEMPLATE VARCHAR(MAX);
SET @CREATE_DATABASE_TEMPLATE = 'CREATE DATABASE ['+ @db_name+ '] ON  PRIMARY 
( NAME = '+CHAR(39)+@db_name+'_Data'+CHAR(39)+', FILENAME = '+CHAR(39)+'{PHYSICAL_PATH}'+@db_name+'_Data.MDF'+CHAR(39)+' , SIZE = 11712KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%), FILEGROUP [ARCH] 
( NAME = '+CHAR(39)+@db_name+'_Arch_Data'+CHAR(39)+', FILENAME = '+CHAR(39)+'{PHYSICAL_PATH}'+@db_name+'_Arch_Data.NDF'+CHAR(39)+' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 102400KB ) LOG ON 
( NAME = '+CHAR(39)+@db_name+'_Log'+CHAR(39)+', FILENAME = '+CHAR(39)+'{PHYSICAL_PATH}'+@db_name+'_Log.LDF'+CHAR(39)+', SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'
EXEC sp_executesql @sqlcmd, @ParmDefinition, @phys_pathOUT = @phys_path OUTPUT
SET @CREATE_DATABASE_TEMPLATE = REPLACE( @CREATE_DATABASE_TEMPLATE , '{PHYSICAL_PATH}', @phys_path )
EXECUTE( @CREATE_DATABASE_TEMPLATE ) -- creating database at existing physical path location
GO

要在数据库中创建“mysch”模式,请调用:

USE [MY_DB_NAME]
GO
CREATE SCHEMA mysch
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多