1 --SQL 語句為表添加字段並設置默認值 2 alter table Student --表名 3 add fee --添加的字段名 4 int --字段類型 5 not null --是否為空 6 default 15 --默認值 7 8 9 --修改字段的數據類型和是否為空 10 alter table Student 11 alter column S_Sex 12 varchar(10) null 13 14 15 -- with 把查詢出來的表當做源表,但是必須把數據庫的兼容性設置為:90+ 16 with t as (select * from Student) 17 18 select * from t 19 20 21 -- 為表Student添加一個列 22 alter table Student 23 add C_S_Id int null 24 25 -- 為表Student新增列添加外鍵約束 26 alter table Student -- 需要建立外鍵的表名 27 add constraint C_S_Id -- 外鍵約束名 28 foreign key (C_S_Id) -- 指定外鍵表的外鍵列的列名 29 references Course(C_Id) -- 關聯表的關聯列的列名 30 go 31 32 33 -- 查詢出指定表的外鍵約束名 34 select name 35 from sys.foreign_key_columns f 36 inner join sys.objects o on f.constraint_object_id=o.object_id 37 where f.parent_object_id=object_id('Student') -- Student 表名 38 39 40 -- 刪除指定外鍵約束名的外鍵約束 41 alter table Course drop constraint FK__Course__Stu_Id__15502E78 --FK__Course__Stu_Id__15502E78 外鍵約束名 42 43 44 --返回一個指定數據庫的信息 45 sp_helpdb Test 46 47 --返回所有數據庫的信息 48 sp_helpdb 49 50 --返回一個指定數據庫對象(即表、視圖等)的信息 51 sp_help Course 52 53 --返回所有數據庫表對象(即表、視圖等)的信息 54 sp_help 55 56 57 --設置數據庫兼容性 58 ALTER DATABASE Test --數據庫名 59 SET COMPATIBILITY_LEVEL = 80||90||100 --可以設置為80、90或100 60 GO 61 62 63 -- 設置允許將顯式值插入表的標識列中 64 SET IDENTITY_INSERT Student on 65 go 66 -- 設置不允許將顯式值插入表的標識列中 67 SET IDENTITY_INSERT Student off 68 go 69 70 --on:表示設置為可以手動輸入標識列的值 71 --off:表示設置為不可以手動輸入標識列的值 72 73 74 SET NOCOUNT ON 75 --當 SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。 76 --當 SET NOCOUNT 為 OFF 時,返回計數。 77 78 SET QUOTED_IDENTIFIER ON 79 --當 SET QUOTED_IDENTIFIER 為 ON 時,標識符可以由雙引號分隔,而文字必須由單引號分隔。 80 --當 SET QUOTED_IDENTIFIER 為 OFF 時,標識符不可加引號,且必須遵守所有 Transact-SQL 標識符規則。 81 82 SET ANSI_NULLS ON 83 --當SET ANSI_NULLS為ON時,那么SQL語句中,判斷為空的寫法就要修改為WHERE 字段 IS NULL。 84 --當SET ANSI_NULLS為OFF時,判斷為空的寫法就要修改為WHERE 字段=NULL。
1 -- 為表 Student 的字段 C_Id 添加唯一約束 2 ALTER TABLE Student -- 表名 3 ADD CONSTRAINT UQ_CourseID_Primary_Key -- 約束名 4 UNIQUE (C_Id) -- 指定字段名 5 6 -- 為表 Student 的字段 S_Name 添加默認值約束 7 ALTER TABLE Student -- 表名 8 ADD CONSTRAINT DF_S_Name_Default -- 約束名 9 DEFAULT('233') FOR S_Name -- 指定字段名
1 -- 為表 Student 的字段 C_Id 添加外鍵約束並設置級聯刪除、更新 2 3 ALTER TABLE Student -- 表名 4 ADD CONSTRAINT FK_C_Id_Foreign_Key -- 約束名 5 FOREIGN KEY (C_Id) -- 外鍵列 6 REFERENCES Course(C_Id) -- 指定關聯表的關聯字段 7 ON UPDATE CASCADE -- 設置級聯更新 8 ON DELETE CASCADE -- 設置級聯刪除
補充一個添加和刪除主鍵約束和查詢指定表的主外鍵約束名的 sql 語句:
1 --為已存在的表添加主鍵 2 alter table Student --表名 3 add constraint S_C_Id --主鍵約束名 4 primary key (S_Id) --指定要添加主鍵的列 5 6 7 --根據表名查詢表的主外鍵名 8 select a.Name as 表名,b.Xtype as 鍵類型,b.Name as 鍵名 9 from sysobjects a,sysobjects b 10 where a.ID=b.parent_obj and a.name='Student' 11 and b.Xtype in('F','PK') 12 13 14 --刪除指定表的主鍵約束 15 alter table Student --表名 16 drop constraint PK__Student__A3DFF08D170CE4CD -- PK__Student__A3DFF08D170CE4CD 主鍵約束名
使用 sql 系統存儲過程(sp_helpconstraint)根據指定表的表名查詢表中的約束。
為指定表添加主鍵約束,但顯式設置為非聚集索引。
-- 根據 指定表名 查詢 表的約束 exec sp_helpconstraint UserInfo -- UserInfo 表名 -- 根據指定主鍵約束名刪除指定表的主鍵約束 alter table UserInfo drop constraint PK__UserInfo__5A2040BBA6D6767A -- 添加主鍵約束,但設置為非聚集索引 alter table UserInfo add constraint PK__UserInfo__5A2040BBA6D6767A primary key nonclustered (U_Id)
使用 sql 系統存儲過程(sp_rename)修改指定表的表名或指定表的字段名。
1 --指定表 UserInfo 中的字段名 RoleID 修改為 P_Id 2 exec sp_rename 'UserInfo.RoleID','P_Id' 3 4 --指定表名 UserInfo 修改為新表名 UserInfo 5 exec sp_rename 'UserInfo_Id','UserInfo'
注意: 更改對象名的任一部分都可能會破壞腳本和存儲過程。
使用 sql 系統存儲過程(sp_helptext)獲取自定義存儲過程、視圖、函數等創建的 T-SQL 文本(不可以用於表)。
1 --獲取自定義創建存儲過程 T-SQL 文本 2 EXEC sp_helptext 'SctStu' 3 4 --獲取自定義創建視圖 T-SQL 文本 5 EXEC sp_helptext 'V_DEMO_Ceshi' 6 7 --獲取自定義創建函數 T-SQL 文本 8 EXEC sp_helptext 'Split'
sql server 按照 in 的值的順序進行排序:
1 -- 按照 in 的值進行排序 2 select * from Student 3 where S_StuNo in ('014','003','009') 4 order by CHARINDEX(','+S_StuNo+',',',014,003,009,')
設置顯示或不顯示受影響的行數:
1 -- 設置為 不顯示 受影響的行數 2 set nocount on 3 4 -- 設置為 顯示 受影響的行數 5 set nocount off
設置等待執行時間:
1 select * from Student --查詢第一個表 2 3 waitfor delay '0:0:3' -- 3秒之后執行下一條語句 4 5 select * from Course -- 查詢第二個表
使用 RAISERROR 自定義拋出異常:
1 --拋出自定義的異常,在最后的catch塊中統一處理異常 2 RAISERROR(233333,16,3)
參數:
MessageId:
異常的唯一標識,且這個值會被賦值給 SQL Server 的系統變量 @@Error。自定義異常的 MessageId 建議使用 50000 以后的,因為 50000 以內的會被系統異常占用。
Severity:
異常的級別。任何用戶都可以指定 0 至 18 的級別。小於 0 的級別被解釋為 0,大於 25 的級別被解釋為 25。
19 到 25 級別的錯誤,只能由 sysadmin 角色的成員用 WITH LOG 選項指定。19 到 25 級別的錯誤,將記錄到錯誤日志和應用程序日志。
20 到 25 級別的錯誤,被認為是致命的;遇到致命的級別錯誤,客戶端的連接將在收到消息后終止。C# 中的 catch 塊中可以俘獲 錯誤級別 11 到 19 級別的異常。
0 至 10 之間的級別不會被 catch 捕獲,而 20 到 25 級別的異常,被認為是致命的,會被斷開數據庫連接。所以 C# cath 塊可以接受到這種異常,但異常的內容不是真正的異常內容,可能是類似這樣的內容:“在從服務器接收結果時發生傳輸級錯誤”。
State:
如果輸入負值或大於255 的值會生成錯誤,產生錯誤則會中斷數據庫的連接。
使用 for xml path 把查詢的數據轉換為 XML 格式。
select * from Student where S_Id='7' for xml path
查詢、刪除指定表及指定列的默認值約束,以及刪除字段(即列)。
-- 查詢指定表的指定列的默認值約束 或 指定表的所有默認值約束 SELECT * FROM sys.default_constraints a LEFT JOIN sys.sysconstraints b ON a.object_id = b.constid AND a.parent_object_id=b.id LEFT JOIN sys.columns c ON a.object_id = c.default_object_id WHERE a.parent_object_id = OBJECT_ID('Student') -- Student 指定的表名稱 AND c.NAME='Flag' -- Flag 指定的列名稱,如果不加這個條件就查詢整個表的默認值約束
-- 刪除指定表的默認值約束 ALTER TABLE Student DROP constraint DF__Stu__Flag__707E9C7C -- 刪除指定表的指定字段(列) ALTER TABLE Student DROP COLUMN Flag