我必須獲取所有唯一鍵約束和特定數據庫的索引的列表。我正在做這樣的事情:獲取數據庫中唯一約束和索引的列表
SELECT * FROM sys.sysobjects WHERE type!='u' AND name LIKE <tablename>
只是想確認這是否是正確的方法,或者是否有更好的方法來做同樣的事情?
我必須獲取所有唯一鍵約束和特定數據庫的索引的列表。我正在做這樣的事情:獲取數據庫中唯一約束和索引的列表
SELECT * FROM sys.sysobjects WHERE type!='u' AND name LIKE <tablename>
只是想確認這是否是正確的方法,或者是否有更好的方法來做同樣的事情?
由於唯一約束的封面作爲指標下實現的,您可以直接從SYS.INDEXES獲得所有這些信息:
SELECT
[schema] = OBJECT_SCHEMA_NAME([object_id]),
[table] = OBJECT_NAME([object_id]),
[index] = name,
is_unique_constraint,
is_unique,
is_primary_key
FROM sys.indexes
-- WHERE [object_id] = OBJECT_ID('dbo.tablename');
要重複所有數據庫(想必沒有特定表過濾器):
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'SELECT db = ' + name + ',
[schema] = OBJECT_SCHEMA_NAME([object_id]),
[table] = OBJECT_NAME([object_id]),
[index] = name,
is_unique_constraint,
is_unique,
is_primary_key
FROM ' + QUOTENAME(name) + '.sys.indexes;'
FROM sys.databases
WHERE database_id BETWEEN 4 AND 32766;
EXEC sp_executesql @sql;
一個獨特的約束是由類型sys.objects中表示「UQ」
select name from sys.objects where type='UQ'
要獲得指標
select i.name, o.name from sys.indexes i
inner join sys.objects o on i.object_id= o.object_id
你可以得到的唯一鍵約束和索引從SYS。索引。 具體來說,唯一約束:
select * from sys.indexes where is_unique_constraint = 1
我希望我的編輯解決了困惑... :) – Gagan 2012-08-13 19:55:22
@Nav我進一步澄清(針鋒相對樂仍然聽起來像你想結果跨數據庫 - 我已經離開了我的答案,以防萬一未來的讀者)。 – 2012-08-13 20:03:45
感謝您更新問題。非常感激。 – Gagan 2012-08-14 16:16:37