就像这样:

SELECT
* 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'

但是对于索引。


当前回答

对于SQL 2008及更新版本,一个更简洁的方法,在编码方面,检测索引是否存在是使用INDEXPROPERTY内置函数:

INDEXPROPERTY ( object_ID , index_or_statistics_name , property )  

最简单的用法是IndexID属性:

If IndexProperty(Object_Id('MyTable'), 'MyIndex', 'IndexID') Is Null

如果索引存在,则返回索引ID;如果没有,它将返回NULL。

其他回答

如果你的问题的隐藏目的是在INSERT到一个大表之前DROP索引,那么这是有用的一行代码:

DROP INDEX IF EXISTS [IndexName] ON [dbo].[TableName]

此语法自SQL Server 2016以来可用。文件如果存在:

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/

如果你处理的是一个主键,那么使用这个:

ALTER TABLE [TableName] DROP CONSTRAINT IF EXISTS [PK_name] 

你可以像这样直接选择:

SELECT * 
FROM sys.indexes 
WHERE name='YourIndexName' AND object_id = OBJECT_ID('Schema.YourTableName')

查询指定表上是否存在聚集索引。

SELECT * FROM SYS.indexes 
WHERE index_id = 1 AND name IN (SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Table_Name')
EXEC sp_helpindex '[[[SCHEMA-NAME.TABLE-NAME]]]'
GO

对于SQL 2008及更新版本,一个更简洁的方法,在编码方面,检测索引是否存在是使用INDEXPROPERTY内置函数:

INDEXPROPERTY ( object_ID , index_or_statistics_name , property )  

最简单的用法是IndexID属性:

If IndexProperty(Object_Id('MyTable'), 'MyIndex', 'IndexID') Is Null

如果索引存在,则返回索引ID;如果没有,它将返回NULL。