2013-10-14 68 views
1

我使用這個代碼通過數據庫列的列表迭代:要是不知道具體的列是標識(在SQL Server)

adapter = New SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & i & "'", connection) 
Dim ds_cols As New DataSet 
adapter.Fill(ds_cols) 

For Each c As DataRow In ds_cols.Tables(0).Rows 
'doing lots of things in here 


Next 

現在,我需要查詢數據庫(甚至更好編輯現有的一個)知道我正在分析的當前列是否是一個標識列。

謝謝

+2

使用'sys.columns'而不是'INFORMATION_SCHEMA.COLUMNS'。其中包含有關專有功能的詳細信息,例如'IDENTITY'。也使用參數化查詢。 –

回答

4

您可以檢查sys.columns觀點:

SELECT 
    name, is_identity 
FROM sys.columns 
WHERE name = 'YourColumnName' AND object_id = OBJECT_ID('dbo.YourTableName') 

如果你需要的列的類型,你需要加入到sys.types

SELECT 
    ColumnName = c.name , 
    c.is_identity, 
    TypeName = ty.name 
FROM sys.columns c 
INNER JOIN sys.types ty ON ty.system_type_id = c.system_type_id 
WHERE name = 'YourColumnName' AND object_id = OBJECT_ID('dbo.YourTableName') 
+0

謝謝完美 – sharkyenergy

+0

system_type_id返回整數(56而不是INT,167而不是varchar,等等)可以以某種方式轉換? – sharkyenergy

+1

@sharkyenergy:由於某種原因,查看「sys.types」視圖 –

0

使用下面的查詢會給你2列,即列的名稱,以及它是否是身份。我想這就是你需要的東西

SELECT name, is_identity FROM sys.columns 
WHERE object_id = OBJECT_ID('tableName') 
相關問題