1樓:匿名使用者
收藏這個,非常詳細
一、標識列的定義以及特點
sql server中的標識列又稱識別符號列,習慣上又叫自增列。
該種列具有以下三種特點:
1、列的資料型別為不帶小數的數值型別
2、在進行插入(insert)操作時,該列的值是由系統按一定規律生成,不允許空值
3、列值不重複,具有標識表中每一行的作用,每個表只能有一個標識列。
由於以上特點,使得標識列在資料庫的設計中得到廣泛的使用。
二、標識列的組成
建立一個標識列,通常要指定三個內容:
1、型別(type)
在sql server 2000中,標識列型別必須是數值型別,如下:
decimal、int、numeric、smallint、bigint 、tinyint
其中要注意的是,當選擇decimal和numeric時,小數位數必須為零
另外還要注意每種資料型別所有表示的數值範圍
2、種子(seed)
是指派給表中第一行的值,預設為1
3、遞增量(increment)
相鄰兩個標識值之間的增量,預設為1。
三、標識列的建立與修改
標識列的建立與修改,通常在企業管理器和用transact-sql語句都可實現,使用企業管理管理器比較簡單,請參考sql server的聯機幫助,這
裡只討論使用transact-sql的方法
1、建立表時指定標識列
標識列可用 identity 屬性建立,因此在sql server中,又稱標識列為具有identity屬性的列或identity列。
下面的例子建立一個包含名為id,型別為int,種子為1,遞增量為1的標識列
create table t_test
(id int identity(1,1),
name varchar(50)
)2、在現有表中新增標識列
下面的例子向表t_test中新增一個名為id,型別為int,種子為1,遞增量為1的標識列
--建立表
create table t_test
(name varchar(50)
)--插入資料
insert t_test(name) values('張三')
--增加標識列
alter table t_test
add id int identity(1,1)
3、判段一個表是否具有標識列
可以使用 objectproperty 函式確定一個表是否具有 identity(標識)列,用法:
select objectproperty(object_id('表名'),'tablehasidentity')
如果有,則返回1,否則返回0
4、判斷某列是否是標識列
可使用 columnproperty 函式確定 某列是否具有identity 屬性,用法
select columnproperty( object_id('表名'),'列名','isidentity')
如果該列為標識列,則返回1,否則返回0
4、查詢某表標識列的列名
sql server中沒有現成的函式實現此功能,實現的sql語句如下
select column_name from information_schema.columns
where table_name='表名' and columnproperty(
object_id('表名'),column_name,'isidentity')=1
5、標識列的引用
如果在sql語句中引用標識列,可用關鍵字identitycol代替
例如,若要查詢上例中id等於1的行,
以下兩條查詢語句是等價的
select * from t_test where identitycol=1
select * from t_test where id=1
6、獲取標識列的種子值
可使用函式ident_seed,用法:
select ident_seed ('表名')
7、獲取標識列的遞增量
可使用函式ident_incr ,用法:
select ident_incr('表名')
8、獲取指定表中最後生成的標識值
可使用函式ident_current,用法:
select ident_current('表名')
注意事項:當包含標識列的表剛剛建立,為經過任何插入操作時,使用ident_current函式得到的值為標識列的種子值,這一點在開發資料庫應用程式的時候尤其應該注意。
9.[sql server]關於標識列從1開始計數的問題
在sql server中, 我們有時需要在清空資料表之後,重新新增記錄時,標識列重新從1開始計數。
我們只需要在插入記錄之前,執行下面的命令:
dbcc checkident (表名, reseed, 0)
執行 truncate table 也可以做到,而且效率高因為:
用delete將會把每個操作記錄到日誌中,所以效率低 ,truncate table則一次過,效率快很多。
但是,truncate table有限制,比如說這個標識列是另外一個表的外來鍵,而且標識列當前值為1,插入行從2開始,
而dbcc checkident (表名, reseed, 0)可以用於即使有外來鍵的情況下。
2樓:匿名使用者
select t.欄位名 from tablename t where not exist(t.原先的欄位名)
可以有多個自增欄位
sql server,一張表中,有多個欄位關聯另一張表,怎麼寫sql語句?
3樓:匿名使用者
對於這個問題,無論語句怎麼寫,其實執行起來資料庫內部還是要用join操作來進行處理的,所以你用join就可以,優化的話可以再user表的id屬性上加索引(如果是主鍵預設是有索引的)
4樓:匿名使用者
原理的確是來
你那源個思路。bai但可以通du過下面zhi方式來簡化寫法
daoselect
auserid,auserdes = (select userdes from user b where a.auserid = b.user),
buserid,buserdes = (select userdes from user b where a.bauserid = b.user),
cuserid,cuserdes = (select userdes from user b where a.causerid = b.user),
from userlist a
怎麼在sqlserver查詢分析器中查詢指定日期的資料
可對錶中的日期資料進行轉換,轉成字元查詢。如,要查student表中createtime為2015 08 1的資料進行篩選,可用如下語句 select from student where convert varchar 10 createtime,120 2015 08 01 其中,這裡用到了co...
Sql Server2019查詢sql語句怎麼寫
easy select order.ordernumber,user.username,pruduct.productname,shop.shopname from order,user,cart,pruduct,shop where order.userid user.serid and cart...
如何檢視SqlServer查詢語句的執行效率
sql的藝術 使用語句查詢sql server執行過的語句及執行效率 愛可生雲資料庫 sql 語句摘要可以用在mysql的各個方面,比如 效能字典裡對語句的分析,查詢重寫外掛規則改寫等等。接下來依次看下語句摘要在這兩方面的使用。1.效能字典 mysql call sys.ps setup enabl...