这样的事情:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
但是对于索引。
答案 0 :(得分:420)
您可以使用这样的直接选择来完成:
SELECT *
FROM sys.indexes
WHERE name='YourIndexName' AND object_id = OBJECT_ID('Schema.YourTableName')
答案 1 :(得分:79)
检测索引存在的更简洁的编码方法如下:
If IndexProperty(Object_Id('MyTable'), 'MyIndex', 'IndexId') Is Null
如果索引存在,IndexProperty将返回一个Id,如果它没有,它就不会。
答案 2 :(得分:67)
AdaTheDEV,我使用了你的语法并创建了以下内容以及原因。
问题:由于缺少索引,流程每季度运行一次,耗时一小时。
更正:更改查询过程或过程以检查索引并在缺少时创建它...在查询和过程结束时放置相同的代码以删除索引,因为它不是必需的,而是每季度。仅在此处显示删除语法
-- drop the index
begin
IF EXISTS (SELECT * FROM sys.indexes WHERE name='Index_Name'
AND object_id = OBJECT_ID('[SchmaName].[TableName]'))
begin
DROP INDEX [Index_Name] ON [SchmaName].[TableName];
end
end
答案 3 :(得分:13)
与原始问题略有偏差,但对于未来登陆此处想要DROP
和CREATE
索引的人,即在部署脚本中,可能会有用。
只需将以下内容添加到create语句中即可绕过exists检查:
CREATE INDEX IX_IndexName
ON dbo.TableName
WITH (DROP_EXISTING = ON);
在此处阅读更多内容:CREATE INDEX (Transact-SQL) - DROP_EXISTING Clause
N.B。正如评论中所提到的,索引必须已经存在才能使该子句工作而不会抛出错误。
答案 4 :(得分:6)
编写了以下函数,允许我快速检查索引是否存在;就像OBJECT_ID一样工作。
CREATE FUNCTION INDEX_OBJECT_ID (
@tableName VARCHAR(128),
@indexName VARCHAR(128)
)
RETURNS INT
AS
BEGIN
DECLARE @objectId INT
SELECT @objectId = i.object_id
FROM sys.indexes i
WHERE i.object_id = OBJECT_ID(@tableName)
AND i.name = @indexName
RETURN @objectId
END
GO
编辑:这只返回表的OBJECT_ID,但如果索引不存在则为NULL。我想你可以设置它来返回index_id,但这不是非常有用。
答案 5 :(得分:1)
如果您的问题的隐藏目的是在使DROP
到大型表之前先建立INSERT
索引,那么这将非常有用:
DROP INDEX IF EXISTS [IndexName] ON [dbo].[TableName]
此语法自SQL Server 2016起可用。IF EXISTS
的文档:
答案 6 :(得分:0)
bool enabled = false;
return InkWell(
child: Container(
child: Row(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 16.0, bottom: 16.0, left: 30.0),
),
Text(
text,
style: TextStyle(
color: (enabled
? textColor
: Colors.black54
),
fontWeight: FontWeight.bold
),
)
],
),
decoration: BoxDecoration(
color: (enabled
? background
: Colors.transparent
)
),
),
onTapDown: (TapDownDetails details){
setState(() {
enabled = true;
});
},
onTapCancel: (){
setState(() {
enabled = false;
});
},
onTap: (){
String r_value;
if(text == sheetText[0]){
r_value = "delete";
} else if(text == sheetText[1]){
r_value = "edit";
} else if(text == sheetText[2]){
r_value = "notification";
} else {
return;
}
Navigator.pop(context, r_value);
},
);
答案 7 :(得分:-1)
检查特定表上是否存在聚集索引:
SELECT * FROM SYS.indexes
WHERE index_id = 1 AND name IN (SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Table_Name')