C# 通过查询获取表主键列
它将按id返回所有列。我只需要主键。当我添加以下行时,它是空的:C# 通过查询获取表主键列,c#,.net,sql,vb.net,C#,.net,Sql,Vb.net,它将按id返回所有列。我只需要主键。当我添加以下行时,它是空的: SELECT [name] FROM syscolumns WHERE [id] IN (SELECT [id] FROM sysobjects WHERE [name] = 'ACTIVITY') AND colid IN (SELECT SIK.colid FROM sysindexkeys SIK
SELECT [name]
FROM syscolumns
WHERE [id] IN (SELECT [id]
FROM sysobjects
WHERE [name] = 'ACTIVITY')
AND colid IN (SELECT SIK.colid
FROM sysindexkeys SIK
JOIN sysobjects SO ON SIK.[id] = SO.[id]
AND SO.[name] = 'ACTIVITY')
为什么呢?有没有其他方法可以做同样的事情和工作?既然我赶时间试试这个:
WHERE SIK.indid = 1
此SQL将查找具有主键的所有表:
Declare @TableName varchar(128)
Set @TableName = 'YourTableName'
SELECT c.COLUMN_NAME as [PrimaryKeyColumns]
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
WHERE pk.TABLE_NAME = @TableName
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND c.TABLE_NAME = pk.TABLE_NAME
AND c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
我是从你那儿得到的。还有一些其他示例。这是我在SQL Server中用于返回表主键的SQL
SELECT
i.name AS IndexName,
OBJECT_NAME(ic.OBJECT_ID) AS TableName,
COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
FROM
sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id
WHERE
i.is_primary_key = 1
indid=1
仅提供表上聚集索引的相关信息(如果有)。不能保证主键和聚集索引是相同的。这是我找到的唯一只返回PK列名而不返回其他内容的答案。如果这听起来像你的要求,就用这个答案。
DECLARE @TableSchema varchar(255)
SET @TableSchema = 'dbo'
SET @TableName = 'table_name_here'
SELECT
ColumnName = col.column_name
FROM
information_schema.table_constraints tc
INNER JOIN information_schema.key_column_usage col
ON col.Constraint_Name = tc.Constraint_Name
AND col.Constraint_schema = tc.Constraint_schema
WHERE
tc.Constraint_Type = 'Primary Key'
AND col.Table_name = @TableName
AND col.Table_Schema = @TableSchema