CREATE TABLE
--使用「Sample」DB
USE [Sample]
GO
◎ CREATE一個名為「Gender」的TABLE
--檢查名為「Gender」的TABLE有沒有存在
IF EXISTS( SELECT *
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Gender')
BEGIN
--DELETE [Gender]--這個刪除資料的方式比較快,但也比較刪不乾淨
TRUNCATE TABLE [Gender]--這個刪除資料的方式比較慢,但刪得非常乾淨,建議使用
DROP TABLE [Gender]--砍掉TABLE
END
GO
CREATE TABLE [Gender]
(
[Id] INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Gender] NVARCHAR(50) NOT NULL,
)
ON
[PRIMARY]--儲存在「.MDF」檔案中,因為很可能會有「.NDF」檔
GO
--新增一筆資料
INSERT Gender VALUES(N'Male');
GO
--另外一種新增資料的方式
INSERT Gender(Gender) VALUES(N'Female');
GO
SET IDENTITY_INSERT [Sample].[dbo].[Gender] ON--如果想要自行維護IDENTITY COLUMN的話,請執行這一段
GO
INSERT [Gender](Id, Gender) VALUES(2, 'Female'),(4,'UnKnow')
GO
SET IDENTITY_INSERT [Sample].[dbo].[Gender] OFF--讓IDENTITY COLUMN恢復成讓SSMS自動維護編碼
GO
--CREATE一個名為「Gamer」的TABLE
CREATE TABLE [Gamer]
(
[Id] INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] NVARCHAR(50) NOT NULL,
[Email] NVARCHAR(50) NOT NULL,
[GenderId] INT NOT NULL,
[CreatedDateTime] DATETIME NOT NULL,
[Age] INT NULL
)
ON
[PRIMARY]--儲存在「.MDF」檔案中,因為很可能會有「.NDF」檔
GO
◎ 宣告一個VARIABLE型態的TABLE
DECLARE @tempTable_A TABLE
(
ID INT IDENTITY(1,1),
Name NVARCHAR(10) NOT NULL
)
INSERT @tempTable_A VALUES ('A')--INSERT資料
SELECT * FROM @tempTable_A--撈資料
◎ 修改TABLE名稱、新增/修改欄位
--修改TABLE的名稱
EXEC sp_rename 'Table_A', 'Table_B'--把Table_A重新命名為Table_B
--修改Column的名稱
EXEC sp_rename 'Table_A.City', 'Address', 'column'--把Table_A裡面的City欄位改為Address
--一次增加(多個)欄位
ALTER TABLE [Gamer]
ADD DESCR VARCHAR(20) NOT NULL,
HOME_CITY NVARCHAR(20) NOT NULL
GO
--修改欄位的型態、長度...等等
--注意:修改欄位只能一個欄位一個欄位慢慢修改,無法像增加欄位可以一次處理好多欄位
ALTER TABLE [TableName]
ALTER COLUMN [Column_1] NVARCHAR(65) NULL
GO
◎ 將已存在的欄位製作 FOREIGN KEY
ALTER TABLE [Gamer] --參照TABLE
ADD CONSTRAINT [FK_Gender]
FOREIGN KEY (GenderId) REFERENCES Gender(Id) -- 參照TABLE欄位, 被參照的TABLE欄位
ON DELETE NO ACTION--如果參照的那張TABLE的欄位的資料的值是存在於被參照那張TABLE的欄位時候,這時候如果要DELETE被參照TABLE的那一筆資料,則會無法刪除
--ON DELETE CASCADE --如果參照的那張TABLE的欄位的資料的值是存在於被參照那張TABLE的欄位時候,這時候如果要DELETE被參照TABLE的那一筆資料,則會一起刪除參照TABLE的資料
--ON DELETE SET DEFAULT --如果參照的那張TABLE的欄位的資料的值是存在於被參照那張TABLE的欄位時候,這時候如果要DELETE被參照TABLE的那一筆資料,則會把參照TABLE的資料更新為預設值
--ON DELETE SET NULL --如果參照的那張TABLE的欄位的資料的值是存在於被參照那張TABLE的欄位時候,這時候如果要DELETE被參照TABLE的那一筆資料,則會把參照TABLE的資料更新為NULL
GO
◎ CREATE TABLE 的時候就先建立 FOREIGN KEY
CREATE TABLE [TABLE的名稱]
(
[Column_1] INT FOREIGN KEY REFERENCES Gender(GenderID) NOT NULL
)
ON
[PRIMARY]--儲存在「.MDF」檔案中,因為很可能會有「.NDF」檔
GO
◎ 指定 IDENTITY 欄位從 N+1 開始重新編起
--以下這行Script表 IDENTITY 欄位從 1 開始從新編起
--但若TABLE裡面已經有 1 了,再 INSERT 資料的時候會跳錯誤訊息
DBCC CHECKIDENT(Gamer, RESEED, 0) --([TABLENAME], RESEED, 0)
◎ 查看 IDENTITY 欄位編號到多少
SELECT IDENT_CURRENT('[dbo].[TableName]') AS '查看目前Identity欄位編號到多少'
--SELECT SCOPE_IDENTITY();--游標選取起來執行TABLE的IDENTITY
--SELECT @@IDENTITY;--如果會觸發TIRGGER,則會回傳TIRGGER最後所影響的TABLE的IDENTITY
◎ 查詢TABLE裡面所有INDEX
sp_helpindex [ACCT_BOOK]
◎ 列出所有自己建立的TABLE、VIEW
SELECT *
FROM SYS.sysobjects
WHERE xtype = 'U'
-- IT - Internal table
-- P - Stored procedure
-- PK - PRIMARY KEY constraint
-- S - System table
-- SQ - Service queue
-- U - User table
-- V - View
◎ 尋找所有參考Book的物件(亦及Book是被參考的物件)
SELECT *
FROM sys.dm_sql_referencing_entities('dbo.Book','Object')
◎ 尋找所有參考物件(亦及參數內的物件參考了哪些物件)
SELECT *
FROM sys.dm_sql_referenced_entities('dbo.Book','Object')
◎ 其餘快速鍵/小技巧
sp_HELP [TableName]/[Stored Procedure Name]
或
在SQL指令部分,游標選取 [TableName]/[Stored Procedure Name] 之後,Alt + F1 可以查看所有的相關資訊