天天看點

SQL語句建立資料庫

CREATE DATABASE 語句。

[sql] view plain copy

  1. CREATE DATABASE Epiphany   
  2. ON  
  3. (  
  4.     NAME = Epiphany,  
  5.     FILENAME = \'E:\SQL SERVER 2008\Epiphany_data.mdf\',  
  6.     SIZE = 5MB,  
  7.     MAXSIZE = 20,  
  8.     FILEGROWTH = 20  
  9. )  
  10. LOG ON   
  11. (  
  12.     NAME = Epiphany,  
  13.     FILENAME = \'E:\SQL SERVER 2008\Epiphany_log.ldf\',  
  14.     SIZE = 2MB,  
  15.     MAXSIZE = 10MB,  
  16.     FILEGROWTH = 1MB  
  17. );  

可以用這個模闆,紅色字型自己添加就好了。

CREATE DATABASE Epiphany  

ON

(

    NAME = Epiphany,

    FILENAME = \'E:\SQL SERVER 2008\Epiphany_data.mdf\',

    SIZE = 5MB,

    MAXSIZE = 20,

    FILEGROWTH = 20

)

LOG ON 

(

    NAME = Epiphany,

    FILENAME = \'E:\SQL SERVER 2008\Epiphany_log.ldf\',

    SIZE = 2MB,

    MAXSIZE = 10MB,

    FILEGROWTH = 1MB

);

完畢!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SQL聯機叢書内容:

建立一個新資料庫及存儲該資料庫的檔案,建立一個資料庫快照,或從先前建立的資料庫的已分離檔案中附加資料庫。

 Transact-SQL 文法約定

文法

CREATE DATABASE database_name 
    [ ON 
        [ PRIMARY ] [ <filespec> [ ,...n ] 
        [ , <filegroup> [ ,...n ] ] 
    [ LOG ON { <filespec> [ ,...n ] } ] 
    ] 
    [ COLLATE collation_name ]
    [ WITH <external_access_option> ]
]
[;]

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH [ WITH <service_broker_option> ]
        | ATTACH_REBUILD_LOG }
[;]

<filespec> ::= 
{
(
    NAME = logical_file_name ,
        FILENAME = { \'os_file_name\' | \'filestream_path\' } 
        [ , SIZE = size [ KB | MB | GB | TB ] ] 
        [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
        [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
}

<filegroup> ::= 
{
FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ]
    <filespec> [ ,...n ]
}

<external_access_option> ::=
{
  [ DB_CHAINING { ON | OFF } ]
  [ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

Create a database snapshot
CREATE DATABASE database_snapshot_name 
    ON 
        (
        NAME = logical_file_name,
        FILENAME = \'os_file_name\' 
        ) [ ,...n ] 
    AS SNAPSHOT OF source_database_name
[;]      

參數

database_name

新資料庫的名稱。資料庫名稱在 SQL Server 的執行個體中必須唯一,并且必須符合辨別符規則。

除非沒有為日志檔案指定邏輯名稱,否則 database_name 最多可以包含 128 個字元。如果未指定邏輯日志檔案名稱,則 SQL Server 将通過向database_name 追加字尾來為日志生成 logical_file_name 和 os_file_name。這會将 database_name 限制為 123 個字元,進而使生成的邏輯檔案名稱不超過 128 個字元。

如果未指定資料檔案的名稱,則 SQL Server 使用 database_name 作為 logical_file_name 和 os_file_name。

ON
指定顯式定義用來存儲資料庫資料部分的磁盤檔案(資料檔案)。當後面是以逗号分隔的、用以定義主檔案組的資料檔案的 <filespec> 項清單時,需要使用 ON。主檔案組的檔案清單可後跟以逗号分隔的、用以定義使用者檔案組及其檔案的 <filegroup> 項清單(可選)。
PRIMARY

指定關聯的 <filespec> 清單定義主檔案。在主檔案組的 <filespec> 項中指定的第一個檔案将成為主檔案。一個資料庫隻能有一個主檔案。有關詳細資訊,請參閱檔案和檔案組體系結構。

如果沒有指定 PRIMARY,那麼 CREATE DATABASE 語句中列出的第一個檔案将成為主檔案。

LOG ON
指定顯式定義用來存儲資料庫日志的磁盤檔案(日志檔案)。LOG ON 後跟以逗号分隔的用以定義日志檔案的 <filespec> 項清單。如果沒有指定 LOG ON,将自動建立一個日志檔案,其大小為該資料庫的所有資料檔案大小總和的 25% 或 512 KB,取兩者之中的較大者。不能對資料庫快照指定 LOG ON。
COLLATE collation_name

指定資料庫的預設排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。如果沒有指定排序規則,則将 SQL Server 執行個體的預設排序規則配置設定為資料庫的排序規則。不能對資料庫快照指定排序規則名稱。

不能使用 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 子句指定排序規則名稱。有關如何更改附加資料庫的排序規則的資訊,請通路此 Microsoft 網站。

有關 Windows 和 SQL 排序規則名稱的詳細資訊,請參閱 COLLATE (Transact-SQL)。

FOR ATTACH [ WITH <service_broker_option> ]

指定通過附加一組現有的作業系統檔案來建立資料庫。必須有一個指定主檔案的 <filespec> 項。至于其他 <filespec> 項,隻需要指定與第一次建立資料庫或上一次附加資料庫時路徑不同的檔案的那些項即可。必須有一個 <filespec> 項指定這些檔案。

FOR ATTACH 具有以下要求:

  • 所有資料檔案(MDF 和 NDF)都必須可用。
  • 如果存在多個日志檔案,這些檔案都必須可用。
如果一個可讀/寫資料庫具有一個目前不可用的日志檔案,并且進行附加操作前在沒有使用使用者或打開的事務的情況下關閉了該資料庫,那麼 FOR ATTACH 會自動重新生成日志檔案并更新主檔案。相比之下,對于隻讀資料庫,由于主檔案不能更新,将不能重新生成日志。是以,如果附加一個日志不可用的隻讀資料庫,必須在 FOR ATTACH 子句中提供日志檔案或檔案。
注意:
無法在早期版本的 SQL Server 中附加由較新版本的 SQL Server 建立的資料庫。源資料庫的版本必須至少為 80 (SQL Server 2000),才能附加到 SQL Server 2008。附加相容級别低于 80 的 SQL Server 2000 或 SQL Server 2005 資料庫時,會将其相容級别設定為 80。

在 SQL Server 中,作為待附加資料庫的組成部分的所有全文檔案也将随之一起附加。若要指定全文目錄的新路徑,請指定不帶全文作業系統檔案名的新位置。有關詳細資訊,請參閱“示例”部分。

不能對資料庫快照指定 FOR ATTACH。

如果資料庫使用 Service Broker,請在 FOR ATTACH 子句中使用 WITH <service_broker_option>:

<service_broker_option>
控制 Service Broker 消息傳遞和資料庫的 Service Broker 辨別符。僅當使用 FOR ATTACH 子句時,才能指定 Service Broker 選項。
ENABLE_BROKER
指定對指定的資料庫啟用 Service Broker。也就是說,啟動了消息傳遞,并且在 sys.databases 目錄視圖中将 is_broker_enabled 設定為 true。資料庫保留現有的 Service Broker 辨別符。
NEW_BROKER
在 sys.databases 和還原資料庫中都建立一個新的 service_broker_guid 值,并通過清除結束所有會話端點。Broker 已啟用,但未向遠端會話端點發送消息。必須使用新辨別符重新建立任何引用舊 Service Broker 辨別符的路由。
ERROR_BROKER_CONVERSATIONS
結束所有會話,并産生一個錯誤指出資料庫已附加或還原。Broker 一直處于禁用狀态直到此操作完成,然後再将其啟用。資料庫保留現有的 Service Broker 辨別符。
有關詳細資訊,請參閱管理 Service Broker 辨別。

有關分離或附加資料庫時設定的檔案權限的資訊,請參閱保護資料和日志檔案的安全。

當您附加已複制的資料庫而不是分離的資料庫時,請注意以下事項:

  • 如果将資料庫附加到與原始資料庫相同的伺服器執行個體和版本,則不需要執行其他步驟。
  • 如果您将資料庫附加到同一個伺服器執行個體,但是版本已更新,則必須執行 sp_vupgrade_replication 才能在附加操作完成後更新複制。
  • 如果您将資料庫附加到不同的伺服器執行個體,而不考慮版本,則必須執行 sp_removedbreplication 才能在附加操作完成後删除複制。
注意:
附加使用 vardecimal 存儲格式,但 SQL Server 資料庫引擎 必須至少更新到 SQL Server 2005 Service Pack 2。無法将使用 Vardecimal 存儲格式的資料庫附加到早期版本的 SQL Server。有關 vardecimal 存儲格式的詳細資訊,請參閱将 Decimal 資料存儲為可變長度類型。
有關如何使用附加來更新資料庫的資訊,請參閱如何使用分離和附加來更新資料庫 (Transact-SQL)。
安全說明:
建議您不要附加未知或不可信源中的資料庫。此類資料庫可能包含惡意代碼,這些代碼可能會執行非預期的 Transact-SQL 代碼,或者通過修改架構或實體資料庫結構導緻錯誤。使用來自未知源或不可信源的資料庫前,請在非生産伺服器上針對資料庫運作 DBCC CHECKDB,然後檢查資料庫中的代碼,例如存儲過程或其他使用者定義代碼。
FOR ATTACH_REBUILD_LOG
指定通過附加一組現有的作業系統檔案來建立資料庫。該選項隻限于讀/寫資料庫。如果缺少一個或多個事務日志檔案,将重新生成日志檔案。必須有一個指定主檔案的 <filespec> 項。
注意:
如果日志檔案可用,資料庫引擎将使用這些檔案,而不會重新生成日志檔案。
FOR ATTACH_REBUILD_LOG 具有以下要求:
  • 完全關閉資料庫。
  • 所有資料檔案(MDF 和 NDF)都必須可用。
重要提示:
該操作會中斷日志備份鍊。建議在完成該操作後執行完整資料庫備份。有關詳細資訊,請參閱 BACKUP (Transact-SQL)。

通常,FOR ATTACH_REBUILD_LOG 用于将具有大型日志的可讀/寫資料庫複制到另一台伺服器,在這台伺服器上,資料庫副本頻繁使用,或僅用于讀操作,因而所需的日志空間少于原始資料庫。

不能對資料庫快照指定 FOR ATTACH_REBUILD_LOG。

有關附加資料庫和分離資料庫的詳細資訊,請參閱分離資料庫和附加資料庫。

<filespec>
控制檔案屬性。
NAME logical_file_name
指定檔案的邏輯名稱。指定 FILENAME 時,需要使用 NAME,除非指定 FOR ATTACH 子句之一。無法将 FILESTREAM 檔案組命名為 PRIMARY。
logical_file_name
引用檔案時在 SQL Server 中使用的邏輯名稱。Logical_file_name 在資料庫中必須是唯一的,必須符合辨別符規則。名稱可以是字元或 Unicode 常量,也可以是正常辨別符或分隔辨別符。
FILENAME { \'os_file_name\' | \'filestream_path\' }
指定作業系統(實體)檔案名稱。
\' os_file_name \'

是建立檔案時由作業系統使用的路徑和檔案名。檔案必須駐留在下列一種裝置中:安裝 SQL Server 的本地伺服器、存儲區域網絡 [SAN] 或基于 iSCSI 的網絡。執行 CREATE DATABASE 語句前,指定路徑必須存在。有關詳細資訊,請參閱“備注”部分的“資料庫檔案和檔案組”。

如果為該檔案指定了 UNC 路徑,則無法設定 SIZE、MAXSIZE 和 FILEGROWTH 參數。

如果檔案位于原始分區上,則 os_file_name 必須僅指定現有原始分區的驅動器号。每個原始分區上隻能建立一個資料檔案。

不應将資料檔案放在壓縮檔案系統中,除非這些檔案是隻讀的輔助檔案或資料庫是隻讀的。日志檔案一定不要放在壓縮檔案系統中。有關詳細資訊,請參閱隻讀檔案組和壓縮。

\' filestream_path \'

對于 FILESTREAM 檔案組,FILENAME 指向将存儲 FILESTREAM 資料的路徑。在最後一個檔案夾之前的路徑必須存在,但不能存在最後一個檔案夾。例如,如果指定路徑 C:\MyFiles\MyFilestreamData、C:\MyFiles 必須存在才能運作 ALTER DATABASE,但 MyFilestreamData 檔案夾不能存在。

必須在同一語句中建立檔案組和檔案 (

<filespec>

)。隻能有一個檔案,FILESTREAM 檔案組的 

<filespec>,

SIZE、MAXSIZE 和 FILEGROWTH 屬性不适用于 FILESTREAM 檔案組。

SIZE size

指定檔案的大小。

将 os_file_name 指定為 UNC 路徑時,不能指定 SIZE。SIZE 不适用于 FILESTREAM 檔案組。

size

檔案的初始大小。

如果沒有為主檔案提供 size,則資料庫引擎将使用 model 資料庫中的主檔案的大小。如果指定了輔助資料檔案或日志檔案,但未指定該檔案的 size,則資料庫引擎将以 1 MB 作為該檔案的大小。為主檔案指定的大小至少應與 model 資料庫的主檔案大小相同。

可以使用千位元組 (KB)、兆位元組 (MB)、千兆位元組 (GB) 或兆兆位元組 (TB) 字尾。預設值為 MB。請指定整數,不要包括小數。Size 是整數值。對于大于 2147483647 的值,使用更大的機關。

MAXSIZE max_size
指定檔案可增大到的最大大小。将 os_file_name 指定為 UNC 路徑時,不能指定 MAXSIZE。MAXSIZE 不适用于 FILESTREAM 檔案組。
max_size
最大的檔案大小。可以使用 KB、MB、GB 和 TB 字尾。預設值為 MB。指定一個整數,不包含小數位。如果不指定 max_size,則檔案将不斷增長直至磁盤被占滿。Max_size 是整數值。對于大于 2147483647 的值,使用更大的機關。
UNLIMITED
指定檔案将增長到磁盤充滿。在 SQL Server 中,指定為不限制增長的日志檔案的最大大小為 2 TB,而資料檔案的最大大小為 16 TB。
FILEGROWTH growth_increment
指定檔案的自動增量。檔案的 FILEGROWTH 設定不能超過 MAXSIZE 設定。将 os_file_name 指定為 UNC 路徑時,不能指定 FILEGROWTH。FILEGROWTH 不适用于 FILESTREAM 檔案組。
growth_increment

每次需要新空間時為檔案添加的空間量。

該值可以 MB、KB、GB、TB 或百分比 (%) 為機關指定。如果未在數量後面指定 MB、KB 或 %,則預設值為 MB。如果指定 %,則增量大小為發生增長時檔案大小的指定百分比。指定的大小舍入為最接近的 64 KB 的倍數。

值為 0 時表明自動增長被設定為關閉,不允許增加空間。

如果未指定 FILEGROWTH,則資料檔案的預設值為 1 MB,日志檔案的預設增長比例為 10%,并且最小值為 64 KB。

注意:
在 SQL Server 中,資料檔案的預設增量已從 10% 改為 1 MB。日志檔案的預設值仍然為 10%。
<filegroup>
控制檔案組屬性。不能對資料庫快照指定檔案組。
FILEGROUP filegroup_name
檔案組的邏輯名稱。
filegroup_name
filegroup_name 必須在資料庫中唯一,不能是系統提供的名稱 PRIMARY 和 PRIMARY_LOG。名稱可以是字元或 Unicode 常量,也可以是正常辨別符或分隔辨別符。名稱必須符合辨別符規則。
CONTAINS FILESTREAM
指定檔案組在檔案系統中存儲 FILESTREAM 二進制大型對象 (BLOB)。
DEFAULT
指定命名檔案組為資料庫中的預設檔案組。
<external_access_option>
控制外部與資料庫之間的雙向通路。
DB_CHAINING { ON | OFF }

當指定為 ON 時,資料庫可以為跨資料庫所有權鍊的源或目标。

當為 OFF 時,資料庫不能參與跨資料庫所有權連結。預設值為 OFF。

重要提示:
如果 cross db ownership chaining 伺服器選項為 0 (OFF),SQL Server 執行個體将可以識别此設定。如果 cross db ownership chaining 為 1 (ON),則不論此選項為何值,所有使用者資料庫都可以參與跨資料庫所有權鍊。此選項是通過使用 sp_configure 設定的。

若要設定此選項,要求具有 sysadmin 固定伺服器角色的成員身份。不能針對下列系統資料庫設定 DB_CHAINING 選項:master、model和 tempdb。

有關詳細資訊,請參閱所有權鍊。

TRUSTWORTHY { ON | OFF }

當指定 ON 時,使用模拟上下文的資料庫子產品(例如,視圖、使用者定義函數或存儲過程)可以通路資料庫以外的資源。

當為 OFF 時,模拟上下文中的資料庫子產品不能通路資料庫以外的資源。預設值為 OFF。

隻要附加資料庫,TRUSTWORTHY 就會設定為 OFF。

預設情況下,除 msdb 資料庫之外的所有系統資料庫都将 TRUSTWORTHY 設定為 OFF。對于 model 和 tempdb 資料庫,不能更改此值。建議在任何情況下都不要将 master 資料庫的 TRUSTWORTHY 選項設定為 ON。

若要設定此選項,要求具有 sysadmin 固定伺服器角色的成員身份。

database_snapshot_name
新資料庫快照的名稱。資料庫快照名稱必須在 SQL Server 的執行個體中唯一,并且必須符合辨別符規則。database_snapshot_name 最多可以包含 128 個字元。
ON ( NAME = logical_file_name, FILENAME = \'os_file_name\' ) [ ,...n ]

若要建立資料庫快照,請在源資料庫中指定檔案清單。若要使快照工作,必須分别指定所有資料檔案。但是,日志檔案不允許用于資料庫快照。

有關 NAME 和 FILENAME 以及其值的說明,請參閱等價的 <filespec> 值的說明。

注意:
建立資料庫快照時,不允許使用其他 <filespec> 選項和關鍵字 PRIMARY。
AS SNAPSHOT OF source_database_name

指定要建立的資料庫為 source_database_name 指定的源資料庫的資料庫快照。快照和源資料庫必須位于同一執行個體中。

有關詳細資訊,請參閱“備注”部分的“資料庫快照”。

備注

建立、修改或删除使用者資料庫後,應備份 master 資料庫。

CREATE DATABASE 語句必須以自動送出模式(預設事務管理模式)運作,不允許在顯式或隐式事務中使用。有關詳細資訊,請參閱自動送出事務。

使用一條 CREATE DATABASE 語句即可建立資料庫以及存儲該資料庫的檔案。SQL Server 通過使用以下步驟實作 CREATE DATABASE 語句:

  1. SQL Server 使用 model 資料庫的副本初始化該資料庫及其中繼資料。
  2. 為資料庫配置設定 Service Broker GUID。
  3. 然後,資料庫引擎使用空頁填充資料庫的剩餘部分,包含記錄資料庫中空間使用情況的内部資料頁除外。有關詳細資訊,請參閱資料庫檔案初始化。

在一個 SQL Server 的執行個體中最多可以指定 32,767 個資料庫。

每個資料庫都有一個所有者,它可以在資料庫中執行特殊操作。所有者是建立資料庫的使用者。可以使用 sp_changedbowner 更改資料庫所有者。

資料庫檔案和檔案組

每個資料庫至少有兩個檔案(一個主檔案和一個事務日志檔案)和一個檔案組。可以為每個資料庫指定最多 32,767 個檔案和 32,767 個檔案組。有關詳細資訊,請參閱檔案和檔案組體系結構。

在建立資料庫時,請根據資料庫中預期的最大資料量,建立盡可能大的資料檔案。有關詳細資訊,請參閱使用檔案和檔案組管理資料庫增長。

建議使用存儲區域網絡 (SAN)、基于 iSCSI 的網絡或本地附加的磁盤來存儲 SQL Server 資料庫檔案,因為該配置使 SQL Server 的性能和可靠性得到了優化。預設情況下,不對 SQL Server 啟用使用網絡資料庫檔案(存儲在網絡伺服器或網絡附加的存儲器上)。但是,可以使用跟蹤标志 1807 建立具有基于網絡的資料庫檔案的資料庫。有關此跟蹤标志以及重要的性能和維護注意事項的資訊,請參閱此 Microsoft 網站。

資料庫快照

可以使用 CREATE DATABASE 語句建立現有資料庫(“源資料庫”)的隻讀靜态視圖(“資料庫快照”)。當建立快照時,源資料庫已存在,是以資料庫快照在事務上與源資料庫一緻,源資料庫可以具有多個快照。

注意:
建立資料庫快照時,CREATE DATABASE 語句不能引用日志檔案、脫機檔案、還原檔案和不存在的檔案。

如果建立資料庫快照失敗,快照便成為可疑快照,必須将其删除。有關詳細資訊,請參閱 DROP DATABASE (Transact-SQL)。

每個快照都将一直存在,直到使用 DROP DATABASE 将其删除為止。

有關詳細資訊,請參閱資料庫快照。

資料庫選項

建立資料庫時,總會自動設定幾個資料庫選項。有關這些選項及其預設設定的清單,請參閱設定資料庫選項。可以使用 ALTER DATABASE 語句修改這些選項。

model 資料庫和建立新資料庫

model 資料庫中的所有使用者定義對象都将複制到所有新建立的資料庫中。可以向 model 資料庫中添加任何對象(例如表、視圖、存儲過程、資料類型等),以将這些對象包括到所有建立資料庫中。

當指定 CREATE DATABASE database_name 語句而不帶其他大小參數時,主資料檔案将與 model 資料庫中的主檔案具有相同的大小。

除非指定了 FOR ATTACH,否則每個新資料庫都從 model 資料庫繼承資料庫選項設定。例如,在 model 和建立的任何新資料庫中,資料庫選項 auto shrink 都設定為 true。如果更改了 model 資料庫中的選項,則這些新選項設定也将用于您所建立的所有新資料庫中。在 model 資料庫中的更改操作不會影響現有資料庫。如果在 CREATE DATABASE 語句中指定了 FOR ATTACH,則新資料庫将繼承原始資料庫的資料庫選項設定。

檢視資料庫資訊

可以使用目錄視圖、系統函數和系統存儲過程傳回有關資料庫、檔案和檔案組的資訊。有關詳細資訊,請參閱檢視資料庫中繼資料。

權限

要求具有 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 的權限。

為了控制對運作 SQL Server 執行個體的計算機上的磁盤使用,通常隻有少數登入帳戶才有建立資料庫的權限。

對資料檔案和日志檔案的權限

在 SQL Server 中,會對每個資料庫的資料檔案和日志檔案設定特定的權限。每當對資料庫執行下列操作時,便會設定下列權限:

建立 修改以添加新檔案
附加 備份
分離 還原

如果這些檔案位于具有打開權限的目錄中,那麼以上權限可以防止檔案被意外篡改。有關詳細資訊,請參閱保護資料和日志檔案的安全。

注意:
Microsoft SQL Server 2005 Express Edition 不設定資料檔案和日志檔案權限。

示例

A. 建立未指定檔案的資料庫

以下示例建立名為 

mytest

 的資料庫,并建立相應的主檔案和事務日志檔案。因為語句沒有 <filespec> 項,是以主資料庫檔案的大小為 model 資料庫主檔案的大小。事務日志将設定為下列值中的較大者:512 KB 或主資料檔案大小的 25%。因為沒有指定 MAXSIZE,檔案可以增大到填滿所有可用的磁盤空間為止。

複制代碼
USE master;
GO
IF DB_ID (N\'mytest\') IS NOT NULL
DROP DATABASE mytest;
GO
CREATE DATABASE mytest;
GO
-- Verify the database files and sizes
SELECT name, size, size*1.0/128 AS [Size in MBs] 
FROM sys.master_files
WHERE name = N\'mytest\';
GO
      

B. 建立指定資料和事務日志檔案的資料庫

下面的示例将建立資料庫 

Sales

。因為沒有使用關鍵字 PRIMARY,第一個檔案 (

Sales

_

dat

) 将成為主檔案。因為在 

Sales

_

dat

 檔案的 SIZE 參數中沒有指定 MB 或 KB,将使用 MB 并按 MB 配置設定。

Sales

_

log

 檔案以 MB 為機關進行配置設定,因為 

SIZE

 參數中顯式聲明了 

MB

 字尾。

複制代碼
USE master;
GO
IF DB_ID (N\'Sales\') IS NOT NULL
DROP DATABASE Sales;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement 
EXECUTE (\'CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = \'\'\'+ @data_path + \'saledat.mdf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = \'\'\'+ @data_path + \'salelog.ldf\'\',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )\'
);
GO
      

C. 通過指定多個資料和事務日志檔案建立資料庫

以下示例建立資料庫 

Archive

,該資料庫具有三個 

100-MB

 資料檔案和兩個 

100-MB

 事務日志檔案。主檔案是清單中的第一個檔案,并使用 

PRIMARY

 關鍵字顯式指定。事務日志檔案在 

LOG ON

 關鍵字後指定。請注意用于 

FILENAME

 選項中各檔案的擴充名:

.mdf

 用于主資料檔案,

.ndf

 用于輔助資料檔案,

.ldf

用于事務日志檔案。

複制代碼
USE master;
GO
IF DB_ID (N\'Archive\') IS NOT NULL
DROP DATABASE Archive;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement 
EXECUTE (\'CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = \'\'\'+ @data_path + \'archdat1.mdf\'\',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = \'\'\'+ @data_path + \'archdat2.ndf\'\',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = \'\'\'+ @data_path + \'archdat3.ndf\'\',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = \'\'\'+ @data_path + \'archlog1.ldf\'\',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = \'\'\'+ @data_path + \'archlog2.ldf\'\',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)\'
);
GO
      

D. 建立具有檔案組的資料庫

以下示例建立資料庫 

Sales

,該資料庫具有以下檔案組:

  • 包含檔案 

    Spri1

    _

    dat

     和 

    Spri2

    _

    dat

     的主檔案組。将這些檔案的 FILEGROWTH 增量指定為 

    15%

  • 名為 

    SalesGroup1

     的檔案組,其中包含檔案 

    SGrp1Fi1

     和 

    SGrp1Fi2

  • 名為 

    SalesGroup2

     的檔案組,其中包含檔案 

    SGrp2Fi1

     和 

    SGrp2Fi2

複制代碼
USE master;
GO
IF DB_ID (N\'Sales\') IS NOT NULL
DROP DATABASE Sales;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement 
EXECUTE (\'CREATE DATABASE  Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = \'\'\'+ @data_path + \'SPri1dat.mdf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = \'\'\'+ @data_path + \'SPri2dt.ndf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = \'\'\'+ @data_path + \'SG1Fi1dt.ndf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = \'\'\'+ @data_path + \'SG1Fi2dt.ndf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = \'\'\'+ @data_path + \'SG2Fi1dt.ndf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = \'\'\'+ @data_path + \'SG2Fi2dt.ndf\'\',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = \'\'\'+ @data_path + \'salelog.ldf\'\',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )\'
);
GO
      

E. 附加資料庫

以下示例分離在示例 D 中建立的資料庫 

Archive

,然後使用 

FOR ATTACH

 子句附加該資料庫。

Archive

 定義為具有多個資料和日志檔案。但是,由于檔案的位置自建立後沒有發生更改,是以隻需在 

FOR ATTACH

 子句中指定主檔案。在 SQL Server 2005 中,要附加的資料庫中包含的所有全文檔案也将随之一起附加。

複制代碼
USE master;
GO
sp_detach_db Archive;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
-- Execute CREATE DATABASE FOR ATTACH statement
EXEC (\'CREATE DATABASE Archive
      ON (FILENAME = \'\'\'+ @data_path + \'archdat1.mdf\'\')
      FOR ATTACH\');
GO
      

F. 建立資料庫快照

以下示例建立資料庫快照 

sales

_

snapshot0600

。由于資料庫快照是隻讀的,是以不能指定日志檔案。為了符合文法要求,指定了源資料庫中的每個檔案,但沒有指定檔案組。

該示例的源資料庫是在示例 D 中建立的 

Sales

 資料庫。

複制代碼
USE master;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
-- execute the CREATE DATABASE statement 
EXECUTE (
\'CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = \'\'\'+ @data_path + \'SPri1dat_0600.ss\'\'),
    ( NAME = SPri2_dat, FILENAME = \'\'\'+ @data_path + \'SPri2dt_0600.ss\'\'),
    ( NAME = SGrp1Fi1_dat, FILENAME = \'\'\'+ @data_path + \'SG1Fi1dt_0600.ss\'\'),
    ( NAME = SGrp1Fi2_dat, FILENAME = \'\'\'+ @data_path + \'SG1Fi2dt_0600.ss\'\'),
    ( NAME = SGrp2Fi1_dat, FILENAME = \'\'\'+ @data_path + \'SG2Fi1dt_0600.ss\'\'),
    ( NAME = SGrp2Fi2_dat, FILENAME = \'\'\'+ @data_path + \'SG2Fi2dt_0600.ss\'\')
AS SNAPSHOT OF Sales\');
GO
      

G. 建立資料庫并指定排序規則名稱和選項

下面的示例将建立資料庫 

MyOptionsTest

。指定了排序規則名稱,并将 

TRUSTYWORTHY

 和 

DB_CHAINING

 選項設定為 

ON

複制代碼
USE master;
GO
IF DB_ID (N\'MyOptionsTest\') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE French_CI_AI
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
--Verifying collation and option settings.
SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
FROM sys.databases
WHERE name = N\'MyOptionsTest\';
GO
      

H. 附加已移動的全文目錄

以下示例同時附加全文目錄 

AdvWksFtCat

 以及 

AdventureWorks

 資料和日志檔案。在該示例中,将全文目錄從其預設位置移動到新位置 

c:\myFTCatalogs

。資料和日志檔案保留在其預設位置。

複制代碼
USE master;
GO
--Detach the AdventureWorks database
sp_detach_db AdventureWorks;
GO
-- Physically move the full text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON 
    (FILENAME = \'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf\'), 
    (FILENAME = \'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf\'),
    (FILENAME = \'c:\myFTCatalogs\AdvWksFtCat\')
FOR ATTACH;
GO      

I. 建立指定一個行檔案組和兩個 FILESTREAM 檔案組的資料庫

下面的示例将建立資料庫 

FileStreamDB

。該資料庫在建立之時包含一個行檔案組和兩個 FILESTREAM 檔案組。每個檔案組都包含一個檔案:

  • FileStreamDB_data

     包含行資料。它包含一個檔案,即帶有預設路徑的 

    FileStreamDB_data.mdf

  • FileStreamPhotos

     包含 FILESTREAM 資料。它包含一個 FILESTREAM 資料容器 

    FSPhotos

    ,位于 

    C:\MyFSfolder\Photos

    。它被标記為預設 FILESTREAM 檔案組。
  • FileStreamResumes

     包含 FILESTREAM 資料。它包含一個位于 

    C:\MyFSfolder\Resumes

     中的 FILESTREAM 資料容器 

    FSResumes

複制代碼
USE master;
GO
IF DB_ID (N\'FileStreamDB\') IS NOT NULL
DROP DATABASE FileStreamDB;
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N\'master.mdf\', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

 -- Execute the CREATE DATABASE statement. 
EXECUTE (\'CREATE DATABASE FileStreamDB
ON PRIMARY 
    (
    NAME = FileStreamDB_data 
    ,FILENAME = \'\'\' + @data_path + \'FileStreamDB_data.mdf\'\'
    ,SIZE = 10MB
    ,MAXSIZE = 50MB
    ,FILEGROWTH = 15%
    ),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
    (
    NAME = FSPhotos
    ,FILENAME = \'\'C:\MyFSfolder\Photos\'\'
-- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
    ),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
    (
    NAME = FileStreamResumes
    ,FILENAME = \'\'C:\MyFSfolder\Resumes\'\'
    ) 
LOG ON
    (
    NAME = FileStream_log
    ,FILENAME = \'\'\' + @data_path + \'FileStreamDB_log.ldf\'\'
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )\'
);
摘自:http://blog.csdn.net/u014526438/article/details/22897897