2010-05-20 77 views
15

我想知道該表是否具有標識列。表是我不知道的。我還沒有完成桌子的結構。使用查詢?如何識別表是否具有標識列

我正在使用Sql Server精簡版。

+5

不要忘記標記答案爲接受,如果你有你想要的信息 – 2011-06-13 17:13:10

+0

另請參見[你如何確定什麼SQL表以編程方式具有標識列](http://stackoverflow.com/q/87747) – 2016-06-10 08:47:54

回答

14

這是查詢哪個返回標識列名;

create procedure GetIdentity 
@tablename varchar(50) 
begin 
    SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
      NAME AS COLUMNNAME, 
      SEED_VALUE, 
      INCREMENT_VALUE, 
      LAST_VALUE, 
      IS_NOT_FOR_REPLICATION 
    FROM  SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename 
end 

然後形成代碼端。

使用datareader角色調用此存儲過程,然後檢查datareader.hasrows()。如果條件值爲真(1),則該表具有標識列(如果已設置)。如果不是,那麼它沒有標識列。

+0

請你能詳細說明這個問題嗎?謝謝你 – Shiny 2010-05-20 08:35:27

+0

檢查現在的答案 – 2010-05-20 09:12:04

3

做到這一點的一種方法是利用存儲過程sp_help。即:

sp_help MyTable 

這將返回有你需要在桌子上的所有信息的數據集。有一個具有身份信息的特定表。

即:

如果它不包含的標識字段標識列會說:「沒有定義標識列」。

+0

我會補充說你可以突出顯示錶的名稱,然後在SSMS中使用鍵盤組合ALT + F1作爲快捷鍵。 – 2017-08-03 17:42:54

2

@Pranay:他說精簡版。存儲過程不受支持,並且沒有sys.anything。

這是呼叫:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

這將返回1(真)或0(假)。

+0

不適用於我 - 無列「AUTO_INC_INCREMENT」 – 2016-03-07 07:04:08

+0

您有額外的下劃線 – Patrick 2016-03-07 15:58:47

6

任何下面的查詢可以用來檢查是否包含標識列存在於該表

1)

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName' 

2)

SELECT * 
FROM sys.identity_columns 
WHERE object_id = (
     SELECT id 
     FROM sysobjects 
     WHERE name = 'TableName' 
    ) 
9

我知道它的很長一段時間但我發現這有幫助

試試這個:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 
1

這一點,讓ü所有的表名,表的COLUMNNAMES和is_identity或不選擇的數據庫

SELECT 
    sys.columns.name 
    , sys.tables.name 
    , is_identity 
FROM sys.columns 
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id 
    AND sys.columns.is_identity = 1 
3
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty可以啓動SQL Server 2008中參考查詢: OBJECTPROPERTY

4

我只想添加此選項以及我認爲這是最簡單的

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

我同意@johnmcp。這個選項確實很簡單,當列是標識時返回1,當列不是標識列時返回0 – Rajat 2017-02-03 11:02:48