TSQL–标示列、GUID 、序列
–1. IDENTIY 列不能為空,不能設默認值,創建后不能使用ALTER TABLE TableName ALTER COLUMN修改,每張表只能有一個自增列
–2. 查看當前值:SELECT IDENT_CURRENT(‘TableName’),
— 查看增量值:SELECT IDENT_INCR(‘TableName’)
— 查看原始種子值:SELECT IDENT_SEED(‘TableName’),起始值, TRUNCATE TABLE 后的初始值。
–3. 允許 顯式 插入自增列:SET IDENTITY_INSERT TableName ON; 設置為ON后,允許當前回話對自增列插入時指定值,該設置只影響當前回話,并且同一回話中只允許同時修改一張表的IDENTITY_INSERT 屬性,對其他表再次設置時會提示:”表 ‘XXX1’ 的 IDENTITY_INSERT 已經為 ON。無法對表 ‘XXX2’ 執行 SET 操作。“,在對自增列顯式插入值后,會檢查或修改自增列的當前值為整表中最大值。
–4. IDENT_CURRENT 不受作用域和會話的限制,而受限于指定的表。 SCOPE_IDENTITY 和 @@IDENTITY 返回在當前會話中的任何表內所生成的最后一個標識值。但是,SCOPE_IDENTITY 只返回插入到當前作用域中的值;@@IDENTITY 不受限于特定的作用域。@@IDENTITY能獲取到由當前語句引發的觸發器,內置存儲過程等倒置的自增值。
–如對表T1插入引發觸發器對表T2也進行插入,@@IDENTITY得到T2的自增值,而SCOPE_IDENTITY獲取當前作用域T1的自增值。
–4. 如果要求值在所有表中唯一,可以使用UNIQUEIDENTIFIER,使用NEWID()來獲得唯一值。
–5. 為避免GUID作為聚簇索引照成的頁面碎片和頁拆分,可以使用NEWSEQUENTIALID()來獲取自增的GUID:
— CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())
— 如果考慮安全性和保密性,建議不適用NEWSEQUENTIALID()
–6. NEWSEQUENTIALID()只能針對表使用DEFAULT方式來實現。使用 NEWSEQUENTIALID() 生成的每個 GUID 在該計算機上都是唯一的。僅當源計算機具有網卡時,使用 NEWSEQUENTIALID() 生成的
–GUID 在多臺計算機上才是唯一的
–7. 序列,2012新特性,數據庫級別對象,每次獲取后自增。
–=============================================
–創建序列
CREATE SEQUENCE [schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH <constant> ]
[ INCREMENT BY <constant> ]
[ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
[ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ <constant> ] } | { NO CACHE } ]
[ ; ]
–=============================================
–獲取序列
NEXT VALUE FOR [ database_name . ] [ schema_name . ] sequence_name
[ OVER (<over_order_by_clause>) ]
–=============================================
–獲取范圍的序列值
sp_sequence_get_range [ @sequence_name = ] N'<sequence>’
, [ @range_size = ] range_size
, [ @range_first_value = ] range_first_value OUTPUT
[, [ @range_last_value = ] range_last_value OUTPUT ]
[, [ @range_cycle_count = ] range_cycle_count OUTPUT ]
[, [ @sequence_increment = ] sequence_increment OUTPUT ]
[, [ @sequence_min_value = ] sequence_min_value OUTPUT ]
[, [ @sequence_max_value = ] sequence_max_value OUTPUT ]
[ ; ]
–=============================================
–創建初始值為1遞增1的序列
CREATE SEQUENCE dbo.mySquence
AS INT
INCREMENT BY 1
START WITH 1
–=============================================
–獲取下個值
SELECT NEXT VALUE FOR dbo.mySquence
–=============================================
–使用表排序后獲取自增序列
SELECT NEXT VALUE FOR dbo.mySquence OVER (ORDER BY C2) AS RID,
C2 FROM [dbo].[TB4]
–=============================================
–可以在列的DEFAULT中使用序列
ALTER TABLE Test.MyTable
ADD DEFAULT N’AdvWorks_’ +
CAST(NEXT VALUE FOR Test.CounterSeq AS NVARCHAR(20))
FOR IDColumn;
–============================================
–獲取4個連續的遞增序列,并返回最小值
DECLARE @range_first_value sql_variant ,
@range_first_value_output sql_variant ;
EXEC sp_sequence_get_range
@sequence_name = N’dbo.mySquence’
, @range_size = 4
, @range_first_value = @range_first_value_output OUTPUT ;
SELECT @range_first_value_output AS FirstNumber ;
–=====================================
–查看當前數據庫中的自增列
SELECT * FROM sys.identity_columns
總結
以上是生活随笔為你收集整理的TSQL–标示列、GUID 、序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webdynpro view navig
- 下一篇: MATLAB强化学习入门——三、深度Q学