我需要一个表的主键的名称和主键列名,请告诉我,我应该写什么查询..请告诉我如何在SQL Server,获取主键名2005
回答
declare @tableName as nvarchar(100)
set @tableName = 'table'
select i.name, c.name
from sys.index_columns ic
join sys.indexes i on ic.index_id=i.index_id
join sys.columns c on c.column_id=ic.column_id
where
i.[object_id] = object_id(@tableName) and
ic.[object_id] = object_id(@tableName) and
c.[object_id] = object_id(@tableName) and
is_primary_key = 1
为什么只有100个? Sysname可以是128. – MartW 2010-01-07 09:11:55
没有理由,真的。我只用了一个偶数。 – 2010-01-07 09:24:09
@Jonas:128也是,:-) – 2010-01-07 09:58:26
不太你在做什么寻找,但你可以发挥与它周围:
SQL 2000: T-SQL to get foreign key relationships for a table
下面是一个使用INFORMATION_SCHEMA视图的另一种选择
SELECT
cu.Table_Catalog,
cu.Table_Schema,
cu.table_name,
cu.Constraint_name ,
cu.column_name
FROM
sys.indexes si
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
on si.name = cu.constraint_name
WHERE
is_primary_key = 1
+1这是比数据库特定的sys表更好。 (@soslo:它可以有多慢?:) – 2010-07-09 11:57:02
只是一个性能说明 - 使用sys表的选择速度比使用INFORMATION_SCHEMA视图的select快几个数量级
- 1. 获取在SQL Server 2005中
- 2. 请告诉我
- 3. 更改SQL Server 2005中的主键值
- 4. 请告诉我代码(//-\\.*)
- 5. 请告诉我的 ')' 在statment
- 6. 请告诉我如何写一个独特的sql语句
- 7. SQL Server 2005 - 如何知道一个字段是否是主键?
- 8. 如何提取MS SQL Server表的主键列的名称?
- 9. 请告诉我,如何安装预建主题离子?
- 10. 请告诉我OpenSSL中
- 11. SQL Server 2005从用户名获取登录名
- 12. 如何从IndexID为获得索引名称在SQL Server 2005
- 13. 如何在SQL Server 2005/2008
- 14. SQL Server 2005外键级联
- 15. 请告诉我如何停止连续搜索在Visual Studio
- 16. 获取表的主键名
- 17. 如何在引导SQL Server 2005 Express时获取DefaultInstance
- 18. 如何在sql server 2005中获取用户创建的模式
- 19. 请告诉我这个
- 20. 请告诉我配置时
- 21. 请告诉我河内
- 22. 请告诉我EFCore.Tools和EFCore.Tools.DotNet
- 23. 从我的SQL中获取XML SQL Server 2005数据
- 24. 请告诉我,我在哪里wrom如何纠正它:
- 25. 在标识列上的SQL Server 2005主键违规
- 26. Git:请告诉我你是谁
- 27. SQL Server报告服务2005 - 如何处理空报告
- 28. 在SQL Server 2005
- 29. 在SQL Server 2005
- 30. 在SQL Server 2005
我假定您正在开发某种通用数据库实用程序;否则你应该**知道**这个信息已经。我会写一个查询系统表sysobects和sysindexes来获取这些信息。但是,我知道MS在SQL Server的更高版本中提供了有用的元数据视图;你会更好地使用这些。 – 2010-01-07 08:05:01
你的问题的结果是,你期望主键只能引用一列 - 这远远不是真的。当然,不是每个桌子都有一个PK – MartW 2010-01-07 09:09:35