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

SQL Server 常用 DDL/DML 語句速查手冊:建表、增刪改查、索引、約束、事務、臨時表、分頁、權限

     編輯:關於SqlServer

建表與自增主鍵

CREATE TABLE [表名] (
  [自動編號字段] INT IDENTITY(1,1) PRIMARY KEY,
  [字段1] NVARCHAR(50) DEFAULT '默認值' NULL,
  [字段2] NTEXT NULL,
  [字段3] DATETIME,
  [字段4] MONEY NULL,
  [字段5] INT DEFAULT 0,
  [字段6] DECIMAL(12,4) DEFAULT 0,
  [字段7] IMAGE NULL
);

基礎增刪改查

-- 插入
INSERT INTO [表名] (字段1, 字段2) VALUES (100, '51Windows.Net');

-- 刪除
DELETE FROM [表名] WHERE [字段名] > 100;

-- 更新
UPDATE [表名] SET [字段1] = 200, [字段2] = '51Windows.Net' WHERE [字段3] = 'HAIWA';

結構變更(ALTER TABLE)

-- 新增字段
ALTER TABLE [表名] ADD [字段名] NVARCHAR(50) NULL;

-- 刪除字段
ALTER TABLE [表名] DROP COLUMN [字段名];

-- 修改字段類型/長度/可空性
ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR(50) NULL;

-- 重命名表
EXEC sp_rename '舊表名', '新表名', 'OBJECT';

約束與默認值

-- 新建 CHECK 約束
ALTER TABLE [表名] ADD CONSTRAINT 約束名 CHECK ([約束字段] <= '2000-1-1');

-- 刪除約束
ALTER TABLE [表名] DROP CONSTRAINT 約束名;

-- 新建默認值
ALTER TABLE [表名] ADD CONSTRAINT 默認值名 DEFAULT '51Windows.Net' FOR [字段名];

-- 刪除默認值
ALTER TABLE [表名] DROP CONSTRAINT 默認值名;

縮減日志與數據庫文件

DUMP TRANSACTION 數據庫名 WITH NO_LOG;
BACKUP LOG 數據庫名 WITH NO_LOG;
DBCC SHRINKDATABASE(數據庫名);
EXEC sp_dboption '數據庫名', 'autoshrink', 'true';

自增列重建(無法直接 ALTER)

ALTER TABLE 表名 DROP COLUMN ID;
ALTER TABLE 表名 ADD ID INT IDENTITY(1,1);

常用系統函數與技巧

需求語句/函數
切換數據庫USE 數據庫名
判斷對象是否存在EXISTS(...) / OBJECT_ID('對象名')
建表時直接建主鍵CONSTRAINT PK名 PRIMARY KEY(列)
創建索引CREATE INDEX 索引名 ON 表名(字段名)
添加外鍵ALTER TABLE 表名 ADD CONSTRAINT FK名 FOREIGN KEY(字段) REFERENCES 表名(字段)
身份列種子/增量IDENTITY(seed, increment)
局部臨時表#表名(當前會話,會話結束自動刪除)
全局臨時表##表名(所有會話可見,最後會話結束刪除)
多實例安裝多次安裝 SQL Server 可創建多個命名實例
重命名列/表sp_rename '表名.舊列名', '新列名', 'COLUMN'
向身份列顯式插值SET IDENTITY_INSERT 表名 ON; ...; SET IDENTITY_INSERT 表名 OFF;
寫入 text/image 大字段WRITETEXT(需先 sp_dboption 'select into/bulkcopy', true)
快速清空表TRUNCATE TABLE 表名(不記錄日志,極快)
統計函數忽略 NULL除 COUNT(*) 外均忽略 NULL
限制 text/image 返回長度SET TEXTSIZE 50 / SELECT @@TEXTSIZE
讀取 text 片段READTEXT 表.列 @指針 偏移 長度
LIKE 正則語法[a-z] 任意字母,[^a-z] 非字母
邏輯運算符優先級NOT > AND > OR
GROUP BY NULL 處理所有 NULL 歸為一組
HAVING vs WHEREHAVING 可用聚合函數,WHERE 不可
UNION 去重UNION ALL 保留重複行
SELECT INTO 建新表需 sp_dboption 'select into/bulkcopy', true
隨機抽 N 行SELECT TOP N * FROM 表 ORDER BY NEWID()
唯一約束CONSTRAINT 名 UNIQUE(列)
企業管理器置 NULL 快捷鍵Ctrl+0
變量賦值SET @v = 值 / SELECT @v = 列 FROM 表 WHERE ...
無 FROM 的 SELECTSELECT @v1, @v2, GETDATE()

遞歸函數範例:樹形結構查詢

CREATE FUNCTION fn_Tree(@Id INT)
RETURNS @tb TABLE (id INT, fid INT)
AS
BEGIN
  INSERT @tb SELECT id, fid FROM tablename WHERE fid = @Id;
  WHILE EXISTS (SELECT 1 FROM tablename WHERE fid IN (SELECT id FROM @tb) AND id NOT IN (SELECT id FROM @tb))
    INSERT @tb SELECT id, fid FROM tablename WHERE fid IN (SELECT id FROM @tb) AND id NOT IN (SELECT id FROM @tb);
  RETURN;
END;
-- 調用
SELECT * FROM dbo.fn_Tree(0);

日期格式轉換速查(CONVERT style)

Style輸出範例說明
11220040912YYYYMMDD
1022004.09.12YYYY.MM.DD
10109/12/2004MM/DD/YYYY
10312/09/2004DD/MM/YYYY
10412.09.2004DD.MM.YYYY
10512-09-2004DD-MM-YYYY
10612 09 2004DD MM YYYY
10709 12, 2004Mon DD, YYYY
10811:06:08HH:MM:SS
10909 12 2004 11:06:08.177Mon DD YYYY HH:MI:SS:mmm
11009-12-2004MM-DD-YYYY
1112004/09/12YYYY/MM/DD
11312 09 2004 11:06:08.177DD Mon YYYY HH:MI:SS:mmm
11411:06:08.177HH:MI:SS:mmm
1202004-09-12 11:06:08YYYY-MM-DD HH:MI:SS (ISO8601)
1212004-09-12 11:06:08.177YYYY-MM-DD HH:MI:SS.mmm (ISO8601+毫秒)

用法:CONVERT(VARCHAR(19), GETDATE(), 120) → 2004-09-12 11:06:08

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved