1. 關於寫sql語句的技巧
恩,這個怎麼說呢
sql語句總結一下,無非就幾種,關聯查詢,子查詢,各種函數的使用
根據要做的需求,先分析一下,需要用到哪些查詢
比如要用到關聯查詢
就先把要用到的表列出來,比如a,b,c三個表
就先寫出來
select from a,b,c
前邊查詢的內容可以先放著不用寫
然後找三個表關聯關系,當然也要看是自然連接還是左連接什麼的,這里就給你舉例正常連接吧
select from a,b,c where a.id=b.aid and b.id=c.bid
關聯關系寫好了,就可以在寫查詢的內容了
select a.name,b.name,sum(c.value) from a,b,c where a.id=b.aid and b.id=c.bid
然後,你再看,因為有聚合查詢,後邊要group by
select a.name,b.name,sum(c.value) from a,b,c where a.id=b.aid and b.id=c.bid group by a.name,b.name
其他的,再有什麼排序啊,等等啊,就好寫了,這里就不往下寫了
子查詢更簡單寫,主要就是要判斷好,要先寫子查詢,然後往外來套,比如
select * from b where id in (select id from a)
這個,你就要先寫括弧里的那個,然後寫外邊的
至於函數的使用,這個沒什麼經驗,就是可能有時會出現類型轉換等等的問題,你就要牢記每個函數的作用,不懂再問吧
2. sql 查詢時要返回結果的時候再增加一列來顯示結果 語句怎麼寫啊
可以參考下面的代碼:
代碼中'成績'是新增的列,按用戶的要求再改改就行
SELECT
Title,
'成績' =
CASE
WHEN price < 60 THEN '不及格'
ELSE '及格'
FROM titles
(2)sql自動回寫擴展閱讀:
sql參考語句
添加主鍵
Alter table tabname add primary key(col)
刪除主鍵
Alter table tabname drop primary key(col)
創建索引
create [unique] index idxname on tabname(col….)
創建視圖
create view viewname as select statement
3. 關於SQL多表同時寫入的存儲過程並且兩表有關聯ID,返回寫入成功與否
獲取前面表新增的自增長欄位的值,使用 scope_identity()
你的第二個語句 insert into 表B (A_ID,DATA2) select scope_identity(),DATA2的值
這樣就可以了。
4. 幫忙寫一個sql 語句, 返回表中最後一條記錄,謝謝了
怎麼定義最後一條呢?必須得有個規則啊.
如果是ID最大的話,借用樓上的:
select top(1) * from table order by id desc 或者
select top(1) * from table where id=(select max(id) from table)
如果是查詢最後一條被插入的記錄,也借用達人的結論:
"除非指定了最後被插入記錄的標識列,或者是ID,或者是插入時間.不然是沒辦法得到這條記錄的."
原文:
If it is the last record inserted, there is no way to get that unless you have some field you maintain to allow you to find the last record inserted.
關於查詢最後一條網上有好多帖子,要研究的話問題可多了....
不過我認為明確自己想要什麼就行了,研究那些個太浪費腦細胞.加個ID欄位最簡單.
5. SQL Server 何時將「臟頁」回寫到硬碟
SQL Server的工作原理:不能直接修改硬碟上的數據,而是先將數據從硬碟讀入到內存的data cache,然後在內存中修改(被修改過的頁稱為臟數據頁),最後再從內存回寫到硬碟。下述進程都可能將臟頁回寫到硬碟。
一、Checkpoint(檢查點)
Checkpoint會搜索整個data cache,將臟頁回寫到硬碟。
以下情況通常會觸發checkpoint:
1、運行Checkpoint 命令。
2、使用alter database往資料庫中添加了文件,或者從資料庫中刪除了文件。
3、備份資料庫。在資料庫備份之前,資料庫引擎會自動執行檢查點,以便在備份中包含對資料庫數據頁面的全部更改。
4、正常關閉SQL Server,並且不使用NOWAIT選項。
5、SQL Server預計的恢復時間超過了恢復間隔(recovery interval)。該值默認為0,即由SQL Server自動配置,一般為1分鍾。一般情況下,按最低每分鍾10MB日誌進行設計。
以下特殊情況也會觸發checkpoint:
1、當恢復模式為簡單時,如果日誌文件的空閑空間低於70%。例外的情況是:如果日誌文件是由於一個事務長時間執行而且尚未結束(意味著沒有空間可釋放)導致空閑空間低於70%,則不會觸發checkpoint。
2、當恢復模式為大容量日誌時,對資料庫做了一個大容量操作。
checkpoint對資料庫的影響:
1、當資料庫重啟時,SQL Server將從checkpoint 完成的這個時間點開始恢復,即在此之後做redo(前滾)。這種機制加速了恢復的進度。
2、當恢復模式為簡單時,checkpoint在把臟頁回寫到硬碟後,就去截斷日誌(將VLF的狀態從2改為0)。
二、Lazywriter(惰性編輯器)
SQL
Server為每一個NUMA(非一致性內存訪問)配備一個Lazywriter線程。Lazywriter被定期喚醒後,就去掃描與NUMA節點中的
data cache,檢查自由列表(free list)。如果列表的大小低於某個閥值(這個閥值取決於data
cache的總大小)意味著內存壓力,Lazywriter就去掃描data
cache,將其中一些頁標記到自由列表,表示這是空閑內存;如果這些頁中有臟頁,就回寫到硬碟。
當Lazywriter察覺到系統有內存壓力時,它會增加或減少自由列表上的數據頁,使操作系統的可用物理內存保持在4.8~5.2MB,以防止分頁。
Lazywriter自SQL Server 2005被引入。它與checkpoint的主要區別:checkpoint不會去修改自由列表。
這是一個周期運行的線程,默認情況下,每隔一秒鍾運行一次。
三、Worker Thread(工作線程)
SQL Server 啟動時,同時啟動30~40個工作線程,用於完成客戶端連接提出的各種操作請求。當客戶端連接增加時,SQL
Server會自動啟動新的工作線程。當某個工作線程空閑15分鍾,就會被關閉;當空閑內存不夠時,某些工作線程也會被關閉(x86環境)。在x86環
境,每個工作線程至少佔用0.5MB內存;在x64環境,每個工作線程至少佔用2MB內存。
當worker線程察覺內存壓力時,它會掃描data cache,把一段時間內未被訪問的數據頁添加到自由列表;如果這些頁中有臟頁,就回寫到硬碟。
6. SQL Server中所說的「臟頁」是什麼意思
SQL Server的工作原理:不能直接修改硬碟上的數據,而是先將數據從硬碟讀入到內存的data cache,然後在內存中修改(被修改過的頁稱為臟數據頁),最後再從內存回寫到硬碟。下述進程都可能將臟頁回寫到硬碟。
一、Checkpoint(檢查點)
Checkpoint會搜索整個data cache,將臟頁回寫到硬碟。
以下情況通常會觸發checkpoint:
1、運行Checkpoint 命令。
2、使用alter database往資料庫中添加了文件,或者從資料庫中刪除了文件。
3、備份資料庫。在資料庫備份之前,資料庫引擎會自動執行檢查點,以便在備份中包含對資料庫數據頁面的全部更改。
4、正常關閉SQL Server,並且不使用NOWAIT選項。
5、SQL Server預計的恢復時間超過了恢復間隔(recovery interval)。該值默認為0,即由SQL Server自動配置,一般為1分鍾。一般情況下,按最低每分鍾10MB日誌進行設計。
以下特殊情況也會觸發checkpoint:
1、當恢復模式為簡單時,如果日誌文件的空閑空間低於70%。例外的情況是:如果日誌文件是由於一個事務長時間執行而且尚未結束(意味著沒有空間可釋放)導致空閑空間低於70%,則不會觸發checkpoint。
2、當恢復模式為大容量日誌時,對資料庫做了一個大容量操作。
checkpoint對資料庫的影響:
1、當資料庫重啟時,SQL Server將從checkpoint 完成的這個時間點開始恢復,即在此之後做redo(前滾)。這種機制加速了恢復的進度。
2、當恢復模式為簡單時,checkpoint在把臟頁回寫到硬碟後,就去截斷日誌(將VLF的狀態從2改為0)。
二、Lazywriter(惰性編輯器)
SQL
Server為每一個NUMA(非一致性內存訪問)配備一個Lazywriter線程。Lazywriter被定期喚醒後,就去掃描與NUMA節點中的
data cache,檢查自由列表(free list)。如果列表的大小低於某個閥值(這個閥值取決於data
cache的總大小)意味著內存壓力,Lazywriter就去掃描data
cache,將其中一些頁標記到自由列表,表示這是空閑內存;如果這些頁中有臟頁,就回寫到硬碟。
當Lazywriter察覺到系統有內存壓力時,它會增加或減少自由列表上的數據頁,使操作系統的可用物理內存保持在4.8~5.2MB,以防止分頁。
Lazywriter自SQL Server 2005被引入。它與checkpoint的主要區別:checkpoint不會去修改自由列表。
這是一個周期運行的線程,默認情況下,每隔一秒鍾運行一次。
三、Worker Thread(工作線程)
SQL Server 啟動時,同時啟動30~40個工作線程,用於完成客戶端連接提出的各種操作請求。當客戶端連接增加時,SQL
Server會自動啟動新的工作線程。當某個工作線程空閑15分鍾,就會被關閉;當空閑內存不夠時,某些工作線程也會被關閉(x86環境)。在x86環
境,每個工作線程至少佔用0.5MB內存;在x64環境,每個工作線程至少佔用2MB內存。
當worker線程察覺內存壓力時,它會掃描data cache,把一段時間內未被訪問的數據頁添加到自由列表;如果這些頁中有臟頁,就回寫到硬碟。
7. sql server事務回滾代碼怎麼寫
事務回滾有幾種,下面只是常見的一種
declare@iErrorCountint
set@iErrorCount=0
begintranTran1
insertintot1(Id,c1)values(1,'1')
set@iErrorCount=@iErrorCount+@@error
insertintot1(Id,c1)values('XX2','2')
set@iErrorCount=@iErrorCount+@@error
if@iErrorCount=0
begin
COMMITTRANTran1--執行事務
end
else
begin
ROLLBACKTRANTran1--回滾事務
end
8. 循環sql怎麼寫
A表一次需要插入N條記錄,
然後這N條記錄中的a欄位值來自於B表的b欄位 。
取得b欄位的sql返回的也是多條記錄。
一次需要插入N條記錄
那麼那個 SQL 多半是
INSERT INTO A
SELECT .. FROM 別的表
既然已經是 SELECT .. FROM 別的表
那就想辦法把 B 表關聯上
9. sql 語句問題
修改資料庫的時候應該可以添加的是 附屬主數據文件 ,文件的擴展名是 ndf 文件,下面誰 SQL SERVER2000的幫助文檔
Transact-SQL 參考
ALTER DATABASE
在資料庫中添加或刪除文件和文件組。也可用於更改文件和文件組的屬性,例如更改文件的名稱和大小。ALTER DATABASE 提供了更改資料庫名稱、文件組名稱以及數據文件和日誌文件的邏輯名稱的能力。
ALTER DATABASE 支持資料庫選項的設置。在早期版本的 Microsoft® SQL Server™ 中,這些選項可以通過 sp_dboption 存儲過程來設置。在此次發布的版本中,SQL Server 繼續支持 sp_dboption存儲過程,但在未來版本中可能不再支持。可使用 DATABASEPROPERTYEX 函數檢索資料庫選項的當前設置。
語法
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
< filespec > ::=
( NAME = logical_file_name
[ , NEWNAME = new_logical_name ]
[ , FILENAME = 'os_file_name' ]
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] )
< optionspec > ::=
<state_option>
| < cursor_option >
| < auto_option >
| < sql_option >
| < recovery_option >
< state_option > ::=
{ SINGLE_USER | RESTRICTED_USER | MULTI_USER }
| { OFFLINE | ONLINE }
| { READ_ONLY | READ_WRITE }
< termination > ::=
ROLLBACK AFTER integer [ SECONDS ]
| ROLLBACK IMMEDIATE
| NO_WAIT
< cursor_option > ::=
CURSOR_CLOSE_ON_COMMIT { ON | OFF }
| CURSOR_DEFAULT { LOCAL | GLOBAL }
< auto_option > ::=
AUTO_CLOSE { ON | OFF }
| AUTO_CREATE_STATISTICS { ON | OFF }
| AUTO_SHRINK { ON | OFF }
| AUTO_UPDATE_STATISTICS { ON | OFF }
< sql_option > ::=
ANSI_NULL_DEFAULT { ON | OFF }
| ANSI_NULLS { ON | OFF }
| ANSI_PADDING { ON | OFF }
| ANSI_WARNINGS { ON | OFF }
| ARITHABORT { ON | OFF }
| CONCAT_NULL_YIELDS_NULL { ON | OFF }
| NUMERIC_ROUNDABORT { ON | OFF }
| QUOTED_IDENTIFIER { ON | OFF }
| RECURSIVE_TRIGGERS { ON | OFF }
< recovery_option > ::=
RECOVERY { FULL | BULK_LOGGED | SIMPLE }
| TORN_PAGE_DETECTION { ON | OFF }
參數
database
是要更改的資料庫的名稱。
ADD FILE
指定要添加文件。
TO FILEGROUP
指定要將指定文件添加到的文件組。
filegroup_name
是要添加指定文件的文件組名稱。
ADD LOG FILE
指定要將日誌文件添加到指定的資料庫。
REMOVE FILE
從資料庫系統表中刪除文件描述並刪除物理文件。只有在文件為空時才能刪除。
ADD FILEGROUP
指定要添加文件組。
filegroup_name
是要添加或除去的文件組名稱。
REMOVE FILEGROUP
從資料庫中刪除文件組並刪除該文件組中的所有文件。只有在文件組為空時才能刪除。
MODIFY FILE
指定要更改給定的文件,更改選項包括 FILENAME、SIZE、FILEGROWTH 和 MAXSIZE。一次只能更改這些屬性中的一種。必須在 <filespec> 中指定 NAME,以標識要更改的文件。如果指定了 SIZE,那麼新大小必須比文件當前大小要大。只能為 tempdb 資料庫中的文件指定 FILENAME,而且新名稱只有在 Microsoft SQL Server 重新啟動後才能生效。
若要更改數據文件或日誌文件的邏輯名稱,應在 NAME 選項中指定要改名的邏輯文件名稱,並在 NEWNAME 選項中指定文件的新邏輯名稱。
示例如下:
MODIFY FILE (NAME = logical_file_name, NEWNAME = new_logical_name...)。
可同時運行幾個 ALTER DATABASE database MODIFY FILE 語句以實現多個修改文件操作時性能最優。
MODIFY NAME = new_dbname
重命名資料庫。
MODIFY FILEGROUP filegroup_name { filegroup_property | NAME = new_filegroup_name }
指定要修改的文件組和所需的改動。
如果指定 filegroup_name 和 NAME = new_filegroup_name,則將此文件組的名稱改為 new_filegroup_name。
如果指定 filegroup_name 和 filegroup_property,則表示給定文件組屬性將應用於此文件組。filegroup_property 的值有:
READONLY
指定文件組為只讀。不允許更新其中的對象。主文件組不能設置為只讀。只有具有排它資料庫訪問許可權的用戶才能將文件組標記為只讀。
READWRITE
逆轉 READONLY 屬性。允許更新文件組中的對象。只有具有排它資料庫訪問許可權的用戶才能將文件組標記為讀/寫。
DEFAULT
將文件組指定為默認資料庫文件組。只能有一個資料庫文件組是默認的。CREATE DATABASE 語句將主文件組設置為初始的默認文件組。如果在 CREATE TABLE、ALTER TABLE 或者 CREATE INDEX 語句中沒有指定文件組,則新表及索引將在默認文件組—中創建。
WITH <termination>
指定當資料庫從一種狀態轉換到另一種狀態時,何時回滾未完成的事務。只能指定一條 termination 子句,而且該子句應跟在 SET 子句後面。
ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
設定是在指定秒數之後回滾還是立即回滾。如果省略了 termination 子句,那麼將允許事務自主提交或回滾。
NO_WAIT
指定如果請求的資料庫語句或選項更改只有等待事務自主提交或回滾才能立即完成,該請求將失敗。
COLLATE < collation_name >
指定資料庫的排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。如果沒有指定排序規則,則將 SQL Server 實例的默認排序規則指派為資料庫的排序規則。
有關 Windows 和 SQL 排序規則名稱的更多信息,請參見 COLLATE。
<filespec>
控制文件屬性。
NAME
指定文件的邏輯名稱。
logical_file_name
是在 Microsoft SQL Server 中引用文件時所用的名稱。該名稱在資料庫中必須唯一,並應遵循標識符規則。該名稱可以是字元或 Unicode 常量、常規標識符或定界標識符。有關更多信息,請參見使用標識符。
FILENAME
指定操作系統中的文件名。當和 MODIFY FILE一起使用時,只能對 tempdb 資料庫中的文件指定 FILENAME。新 tempdb 文件名只有在 SQL Server 停止並重新啟動後才能生效。
'os_file_name'
由操作系統使用的文件的路徑和文件名。該文件必須駐留在安裝 SQL Server 的伺服器上。數據文件和日誌文件不應置於壓縮的文件系統中。
如果文件位於原始分區上,那麼 os_file_name 必須僅指定該原始分區的驅動器字母。每個原始分區上只能存放一個文件。原始分區上的文件不會自動增長;因此,os_file_name 指定原始分區時,不需要指定 MAXSIZE 和 FILEGROWTH 參數。
SIZE
指定文件大小。
size
是文件的大小。後綴 KB、MB、GB 和 TB 可用於指定千位元組、兆位元組、千兆位元組或兆兆位元組。默認值為 MB。指定一個整數,不要包含小數位。size 的最小值是 512 KB,如果 size 未指定,默認值是 1 MB。當隨 ADD FILE 一起指定時,size 是文件的初始大小。當隨 MODIFY FILE 一起指定時,size 是文件的新大小,而且必須大於文件的當前大小。
MAXSIZE
指定最大的文件大小。
max_size
是最大的文件大小。後綴 KB、MB、GB 和 TB 可用於指定千位元組、兆位元組、千兆位元組或兆兆位元組。默認值為 MB。指定一個整數,不要包含小數位。如果沒有指定 max_size,那麼文件大小將一直增長,直至磁碟填滿為止。當磁碟即將填滿時,Microsoft Windows NT® 應用程序日誌將向管理員發出警告。
UNLIMITED
指定文件大小可一直增加直至磁碟已滿。
FILEGROWTH
指定文件增長的增量。
growth_increment
每次需要新的空間時為文件添加的空間大小。值為 0 表示不增長。該值可按 MB、KB 或 % 的形式指定。指定一個整數,不要包含小數位。如果指定了 %,那麼文件增量為文件發生增長時文件大小的指定百分比。如果未在數量後面指定 MB、KB 或 %,則默認值為 MB。如果 FILEGROWTH 未指定,默認值為 10%,且最小值為 64 KB。指定的大小舍入為最接近的 64 KB 的倍數。
<state_option>
控制用戶對資料庫的訪問,資料庫是否處於聯機狀態,以及是否允許寫操作。
SINGLE_USER | RESTRICTED_USER | MULTI_USER
控制哪些用戶可以訪問資料庫。如果指定為 SINGLE_USER,那麼同一時間只能有一個用戶訪問資料庫。如果指定為 RESTRICTED_USER,那麼只有 db_owner、dbcreator 或 sysadmin 角色的成員可以使用資料庫。MULTI_USER 使資料庫返回到正常操作狀態。
OFFLINE | ONLINE
控制資料庫是聯機還是離線。
READ_ONLY | READ_WRITE
指定資料庫是否處於只讀模式。在只讀模式下,用戶可以從資料庫中讀取數據,但不能修改數據。當指定 READ_ONLY 時,資料庫不能處於使用狀態。master 資料庫是一個例外,當該資料庫設置為 READ_ONLY 時,只有系統管理員才能使用該資料庫。READ_WRITE 使資料庫返回到讀寫操作狀態。
<cursor_option>
控制游標選項。
CURSOR_CLOSE_ON_COMMIT ON | OFF
如果指定為 ON,在事務提交或回滾時所有打開的游標都將關閉。如果指定為 OFF,那麼在事務提交時打開的游標仍保持打開;而回滾事務時關閉所有除定義為 INSENSITIVE 或 STATIC 之外的游標。
CURSOR_DEFAULTLOCAL | GLOBAL
控制游標作用域默認為 LOCAL 還是 GLOBAL。
<auto_option>
控制自動選項。
AUTO_CLOSE ON | OFF
如果指定為 ON,那麼最後一個用戶退出後,資料庫將干凈地關閉,其佔用的資源將釋放。如果指定為 OFF,那麼最後一個用戶退出後資料庫仍保持打開。
AUTO_CREATE_STATISTICS ON | OFF
如果指定為 ON,那麼所有優化查詢需要但缺少的統計信息都會在查詢優化時自動生成。
AUTO_SHRINK ON | OFF
如果指定為 ON,資料庫文件將定期自動收縮。
AUTO_UPDATE_STATISTICS ON | OFF
如果指定為 ON,所有查詢優化所需的過時的統計信息在都將在優化時自動重建。如果指定為 OFF,統計信息必須手工更新。
<sql_option>
控制 ANSI 遵從性選項。
ANSI_NULL_DEFAULT ON | OFF
如果指定為 ON,CREATE TABLE 在確定列是否允許空值時遵從 SQL-92 規則。
ANSI_NULLS ON | OFF
如果指定為 ON,所有與空值的比較運算結果為 UNKNOWN。如果指定為 OFF,非 UNICODE 值與空值的比較運算在兩者均為 NULL 時結果為 TRUE。
ANSI_PADDING ON | OFF
如果指定為 ON,在比較或插入前,字元串將填充為同一長度。如果指定為 OFF,字元串將不填充。
ANSI_WARNINGS ON | OFF
如果指定為 ON,當出現諸如被零除的情況時將產生錯誤或警告。
ARITHABORT ON | OFF
如果指定為 ON,在執行查詢時如果發生溢出或被零除,該查詢將終止。
CONCAT_NULL_YIELDS_NULL ON | OFF
如果指定為 ON,當串聯操作的兩個操作數中任意一個為 NULL 時,結果也為 NULL。如果指定為 OFF,空值將按空字元串對待。默認設置為 OFF。
QUOTED_IDENTIFIER ON | OFF
如果指定為 ON,雙引號將可用於包含定界標識符。
NUMERIC_ROUNDABORT ON | OFF
如果指定為 ON,當表達式中出現精度損失時將產生錯誤。
RECURSIVE_TRIGGERS ON | OFF
如果指定為 ON,將允許遞歸激發觸發器。RECURSIVE_TRIGGERS OFF(默認值)只禁止直接遞歸。若要也禁用間接遞歸,請使用 sp_configure 將 nested triggers 伺服器選項設置為 0。
<recovery_options>
控制資料庫恢復選項。
RECOVERY FULL | BULK_LOGGED | SIMPLE
如果指定為 FULL,系統將對介質錯誤提供完全保護。如果數據文件損壞,介質恢復可以還原所有已提交的事務。
如果指定為 BULK_LOGGED,將在介質錯誤保護程度與某些大規模或大容量操作的最優性能及日誌存儲空間最少佔用量之間進行權衡。這些操作包括 SELECT INTO、大容量裝載操作(bcp 和 BULK INSERT)、CREATE INDEX 以及文本和圖象操作(WRITETEXT 和 UPDATETEXT)。
在大容量日誌記錄恢復模型下,對整個類只做最少的日誌記錄,並且無法逐個操作地控制日誌記錄行為。
如果指定為 SIMPLE,系統將提供佔用日誌空間最小的備份策略。伺服器故障恢復不再需要的日誌空間可被自動重用。
重要 簡單恢復模型比其它兩種模型更容易管理,但數據文件損壞時造成數據丟失的可能性更大。最近的資料庫備份或差異資料庫備份之後的更改都將丟失,必須手工重新輸入。
默認恢復模型由 model 資料庫的恢復模型確定。若要更改新資料庫的默認值,請用 ALTER DATABASE 設置 model 資料庫的恢復選項。
TORN_PAGE_DETECTION ON | OFF
如果指定為 ON,將可以檢測到未完成的頁。默認設置為 ON。
注釋
若要刪除資料庫,請使用 DROP DATABASE 語句。若要更改資料庫名稱,請使用 sp_renamedb。有關減小資料庫大小的更多信息,請參見 DBCC SHRINKDATABASE。
在對資料庫應用不同的或新的排序規則時,應確保符合以下條件:
您是當前資料庫的唯一用戶。
沒有依賴資料庫排序規則的架構綁定對象。
如果資料庫中存在以下依賴資料庫排序規則的對象,則 ALTER DATABASE database COLLATE 語句將失敗。SQL Server 將針對每一個阻塞 ALTER 操作的對象返回一個錯誤信息:
通過 SCHEMABINDING 創建的用戶定義函數和視圖。
計算列。
CHECK 約束。
表值函數返回包含字元列的表,這些列繼承了默認的資料庫排序規則。
改變資料庫的排序規則不會在任何數據對象的系統名稱中產生重復名稱。
如果改變排序規則後出現重復的名稱,則下列命名空間可能導致改變資料庫排序規則的操作失敗:
對象名(如過程、表、觸發器或視圖)。
架構名(如組、角色或用戶)。
標量類型名(如系統和用戶定義類型)。
全文目錄名稱。
對象內的列名或參數名。
表范圍內的索引名。
由新的排序規則產生的重復名稱將導致改變操作失敗,SQL Server 將返回錯誤信息,指出重復名稱所在的命名空間。
當 BACKUP 語句正在執行時,不能添加或刪除文件。
若要在 size 參數中指定兆位元組的分數,應通過乘以數字 1024 將該值轉換為千位元組。例如,應指定 1536 KB 而不是 1.5MB(1.5 x 1024 = 1536)。
許可權
ALTER DATABASE 許可權默認授予 sysadmin 和 dbcreator 固定伺服器角色成員以及 db_owner 固定資料庫角色成員。這些許可權是不可傳遞的。
示例
A. 向資料庫中添加文件
下例創建資料庫,並更改該資料庫以添加一個 5 MB 大小的新數據文件。
USE master
GO
CREATE DATABASE Test1 ON
(
NAME = Test1dat1,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
ALTER DATABASE Test1
ADD FILE
(
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
B. 向資料庫中添加由兩個文件組成的文件組
下例在示例 A 中所創建的 Test1 資料庫中創建一個文件組,並將兩個 5 MB 的文件添加到該文件組。然後下例將 Test1FG1 設置為默認文件組。
USE master
GO
ALTER DATABASE Test1
ADD FILEGROUP Test1FG1
GO
ALTER DATABASE Test1
ADD FILE
( NAME = test1dat3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1dat4,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP Test1FG1
ALTER DATABASE Test1
MODIFY FILEGROUP Test1FG1 DEFAULT
GO
C. 向資料庫中添加兩個日誌文件
下例向資料庫中添加兩個 5 MB 大小的日誌文件。
USE master
GO
ALTER DATABASE Test1
ADD LOG FILE
( NAME = test1log2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test2log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1log3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test3log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
GO
D. 從資料庫中刪除文件
下例將示例 B 中添加到資料庫 Test1 中的一個文件刪除。
USE master
GO
ALTER DATABASE Test1
REMOVE FILE test1dat4
GO
E. 更改文件
下例將示例 B 中添加到資料庫 Test1 中的一個文件增加大小。
USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO
F. 將主文件組設置為默認文件組
假定原來另一個文件組設置為默認文件組,下例將主文件組設置為默認文件組。
USE master
GO
ALTER DATABASE MyDatabase
MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
請參見
CREATE DATABASE
DROP DATABASE
sp_helpdb
sp_helpfile
sp_helpfilegroup
sp_renamedb
sp_spaceused
使用恢復模型
&;1988-2000 Microsoft Corporation。保留所有權利。