首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 入門必讀:21 大常見操作疑難雜症解析

     編輯:關於SqlServer

從安裝設定到日常維護的實戰 FAQ

針對 SQL Server 2000 初學者與開發人員最常遇到的 21 個實務問題,提供標準解法、原理解析與最佳實踐建議。

1. Windows 驗證模式設定

問題:如何啟用 Windows 整合驗證?

解法:企業管理器 → 右鍵伺服器 → 內容 → 安全性 → 選擇「Windows 僅限」或「SQL Server 和 Windows」模式。修改後需重啟 MSSQLServer 服務生效。

2. 資料庫自動收縮設定

問題:如何啟用/手動執行資料庫收縮?

解法:

  • 自動:資料庫內容 → 選項 → 勾選「自動收縮」
  • 手動:右鍵資料庫 → 所有工作 → 收縮資料庫

警告:生產環境不建議啟用自動收縮,會造成索引碎片化、效能抖動。建議排程重建索引 + 手動收縮。

3. 字串條件運算式寫法效能差異

萬用字元:_ 單一字元、% 任意長度、[範圍] 如 [A-F]、[0-9]。

4. 查詢分析器操作技巧

  • 部分執行:反白選取特定陳述式 → 執行 (工具列綠箭頭或 F5)
  • 單行註解:-- 註解內容
  • 多行註解:/* 註解區塊 */ (可巢狀)

5. 伺服器名稱連線字串

寫法適用場景索引利用效能
WHERE Name = '張三'精確比對可用索引 Seek最佳
WHERE Name LIKE '張%'前綴比對可用索引 Seek良好
WHERE Name LIKE '%三'後綴/中間比對索引掃描/全表掃描差

6. 產生資料庫腳本

企業管理器 → 右鍵資料庫 → 所有工作 → 產生 SQL 腳本 → 選項頁 → 勾選所需物件類型與選項 (含索引、觸發器、權限等)。

7. 快速複製資料表結構

企業管理器設計模式:來源表 → 右鍵複製 → 新建表設計視窗 → 右鍵貼上。若報錯「重複欄位」,將問題欄位移至最後再嘗試。

8. TRUNCATE TABLE vs DELETE 關鍵差異

類型格式範例
本機預設實體(local) / . / 127.0.0.1 / localhost.
本機具名實體.\實體名稱.\SQLEXPRESS
遠端伺服器IP位址 / 主機名稱 / 主機名稱\實體名稱192.168.1.100 / DB-SERVER\PROD
特性TRUNCATE TABLEDELETE
記錄寫入最小記錄 (僅頁釋放)完整記錄每列刪除
觸發器不觸發觸發 AFTER DELETE
身分識別欄位重置為種子值保留現值
外鍵限制不可有參考此表的 FK檢查 FK 限制
回復速度極快較慢

9. 批次插入多筆相似資料

-- 方法 1: UNION ALL (適用於少量固定值)
INSERT INTO Target (Col1, Col2)
SELECT 'A', 1 UNION ALL SELECT 'B', 2 UNION ALL SELECT 'C', 3;

-- 方法 2: 從來源表選取 (大量資料)
INSERT INTO Target (Col1, Col2)
SELECT ColA, ColB FROM Source WHERE Condition = 'X';

-- 注意: DEFAULT 關鍵字僅在單列 INSERT VALUES 中有效

10. SELECT INTO 建立新表複製資料

SELECT Col1, Col2, Col3 
INTO NewTable 
FROM SourceTable 
WHERE Condition = 'Y';
-- 新表不可預先存在,結構與查詢結果一致,無索引/限制/觸發器

11. 多表查詢同名欄位合併行為

兩表查詢同名欄位 (如 SELECT A.ID, B.ID FROM A, B) 會產生兩個同名欄位,不會自動合併。若需合併需使用 COALESCE 或 ISNULL 明確處理。

12-13. 匯出至 Access/Excel 格式陷阱

  • DTS 匯出精靈「目的地」選擇:Access 選 Microsoft Access (鑰匙圖示),Excel 選 Microsoft Excel 97-2000 (綠色 X 圖示)
  • 勿選擇 ODBC/Jet OLE DB 通用驅動,易導致資料型別錯誤

14. 身分識別欄位數值不連續/異常

原因:交易回滾、刪除資料、伺服器重啟皆會造成間隙。
修正:暫停身分識別插入 → 手動補齊 → 恢復身分識別:

SET IDENTITY_INSERT TableName ON;
INSERT INTO TableName (ID, Col) VALUES (5, 'Data'); -- 手動指定 ID
SET IDENTITY_INSERT TableName OFF;
DBCC CHECKIDENT ('TableName', RESEED, 5); -- 重置種子

15. 建立限制條件失敗

原因:現有資料違反新限制 (如 NULL 值違反 NOT NULL、重複值違反 UNIQUE)。
解法:先清理資料再建立限制,或建立 WITH NOCHECK 後再驗證。

16. SQL 登入建立後無法登入

  1. 確認是「SQL Server 登入」而非「資料庫使用者」
  2. 重啟 SQL Server 服務 (MSSQLServer)
  3. 重啟查詢分析器/應用程式連線池

17. 權限設定不生效

檢查登入屬性 → 資料庫存取頁:目標資料庫是否勾選?角色頁:是否指派 db_owner、db_datareader 等角色 (而非僅 public)?

18. 日期常值標準寫法

安全格式 (不受語言/日期格式設定影響):
'YYYYMMDD' (如 '20241225')
'YYYY-MM-DDTHH:MM:SS' (ISO 8601,如 '2024-12-25T14:30:00')

避免使用:'MM/DD/YYYY'、'DD/MM/YYYY'、'YYYY/MM/DD' 等模稜兩可格式。

19. 聚合函數對 NULL 的處理

SUM、AVG、COUNT(欄位)、MIN/MAX 皆忽略 NULL 值。
COUNT(*) 計算列數包含 NULL 列。
AVG 分母為非 NULL 列數。

20. 預設值與 NULL 插入行為

欄位定義 DEFAULT 'N/A' 時:
INSERT INTO T (Col) VALUES (DEFAULT) → 寫入 'N/A'
INSERT INTO T (Col) VALUES (NULL) → 寫入 NULL (若允許)
INSERT INTO T DEFAULT VALUES → 所有欄位用預設值

21. 刪除資料庫所有使用者表腳本

DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'DROP TABLE [' + SCHEMA_NAME(schema_id) + '].[' + name + ']; '
FROM sys.objects WHERE type = 'U';
EXEC sp_executesql @sql;
-- 注意: 有外鍵關聯時需先刪除 FK,可查詢 sys.foreign_keys 產生 ALTER TABLE DROP CONSTRAINT 腳本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved