資料定義語言 (DDL)
建立資料表
CREATE TABLE TableName (
ID INT IDENTITY(1,1) PRIMARY KEY, -- 自動編號主鍵
Col1 NVARCHAR(50) DEFAULT '預設值' NULL,
Col2 NTEXT NULL,
Col3 DATETIME,
Col4 MONEY NULL,
Col5 INT DEFAULT 0,
Col6 DECIMAL(12,4) DEFAULT 0,
Col7 IMAGE NULL
);
刪除資料表
DROP TABLE TableName;
新增欄位
ALTER TABLE TableName ADD ColName NVARCHAR(50) NULL;
刪除欄位
ALTER TABLE TableName DROP COLUMN ColName;
修改欄位型別/屬性
ALTER TABLE TableName ALTER COLUMN ColName NVARCHAR(100) NOT NULL;
重新命名資料表
EXEC sp_rename 'OldTableName', 'NewTableName', 'OBJECT';
約束管理
-- 新增 CHECK 約束
ALTER TABLE TableName ADD CONSTRAINT CK_ColName CHECK (ColName <= '2000-01-01');
-- 刪除約束
ALTER TABLE TableName DROP CONSTRAINT CK_ColName;
-- 新增 DEFAULT 約束
ALTER TABLE TableName ADD CONSTRAINT DF_ColName DEFAULT '預設值' FOR ColName;
-- 刪除 DEFAULT 約束
ALTER TABLE TableName DROP CONSTRAINT DF_ColName;
資料操作語言 (DML)
插入資料
INSERT INTO TableName (Col1, Col2) VALUES (100, N'測試資料');
刪除資料
DELETE FROM TableName WHERE ColName > 100;
更新資料
UPDATE TableName
SET Col1 = 200, Col2 = N'更新後'
WHERE Col3 = N'條件值';
資料查詢語言 (DQL) 進階
判斷資料表是否存在
IF EXISTS (SELECT 1 FROM sysobjects WHERE id = OBJECT_ID(N'[dbo].[TableName]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
PRINT '表存在';
ELSE
PRINT '表不存在';
查詢資料表結構
SELECT c.name AS ColumnName, t.name AS DataType, c.max_length, c.precision, c.scale, c.is_nullable
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.object_id = OBJECT_ID(N'[dbo].[TableName]');
資料庫維護指令
縮減資料庫/記錄檔大小(SQL 2000/2005 舊語法)
-- 僅供舊版本參考,新版建議使用 DBCC SHRINKFILE 指定檔案
DUMP TRANSACTION DBName WITH NO_LOG;
BACKUP LOG DBName WITH NO_LOG;
DBCC SHRINKDATABASE(DBName);
EXEC sp_dboption 'DBName', 'autoshrink', 'true';
> ⚠️ **注意**:生產環境**極不建議**頻繁縮減檔案,會導致索引碎片化、效能下降。正確做法是設定合適的復原模式、定期記錄備份、預先規劃檔案成長增量。
實用輔助函數
動態新增欄位
CREATE PROCEDURE usp_AddColumn
@TableName NVARCHAR(128),
@ColumnName NVARCHAR(128),
@ColumnType NVARCHAR(128)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX) = N'ALTER TABLE ' + QUOTENAME(@TableName) + N' ADD ' + QUOTENAME(@ColumnName) + N' ' + @ColumnType;
EXEC sp_executesql @sql;
END
動態修改欄位
CREATE PROCEDURE usp_ModifyColumn
@TableName NVARCHAR(128),
@ColumnName NVARCHAR(128),
@ColumnType NVARCHAR(128)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX) = N'ALTER TABLE ' + QUOTENAME(@TableName) + N' ALTER COLUMN ' + QUOTENAME(@ColumnName) + N' ' + @ColumnType;
EXEC sp_executesql @sql;
END
快速參考卡
| 操作 | 指令關鍵字 | 備註 |
| 建表 | CREATE TABLE | 指定主鍵、預設值、NULL/NOT NULL |
| 刪表 | DROP TABLE | 不可回復,謹慎使用 |
| 改表名 | sp_rename | 第三參數 'OBJECT' |
| 加欄位 | ALTER TABLE ... ADD | 預設值加在型別後 |
| 刪欄位 | ALTER TABLE ... DROP COLUMN | 資料遺失 |
| 改欄位 | ALTER TABLE ... ALTER COLUMN | 型別相容才能改 |
| 加約束 | ALTER TABLE ... ADD CONSTRAINT | 命名規範:CK_、DF_、FK_、PK_、UQ_ |
| 查結構 | sys.columns + sys.types | 比 sp_help 更精確 |