Kimlik anahtarına dayalı olmayan kümelenmiş dizinleri olan tüm tabloları döndüren bir sorgu yazmak mümkün mü?Kümelenmiş dizinleri bulmak için SQL Server sorgusu
cevap
:
SELECT
TableName = t.name,
ClusteredIndexName = i.name,
ColumnName = c.Name
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.object_id = i.object_id
INNER JOIN
sys.index_columns ic ON i.index_id = ic.index_id AND i.object_id = ic.object_id
INNER JOIN
sys.columns c ON ic.column_id = c.column_id AND ic.object_id = c.object_id
WHERE
i.index_id = 1 -- clustered index
AND c.is_identity = 0
AND EXISTS (SELECT *
FROM sys.columns c2
WHERE ic.object_id = c2.object_id AND c2.is_identity = 1)
OK, bu sorgu değil kimlik olan bir sütuna sahip olan birincil anahtarları listelemek getirecek ve aynı zamanda da birincil anahtar kısıtlaması ikinci sütun olduğu yerde bir IDENTITY
sütunudur.
Marc, kümelenmiş bir dizin değil, ben bir kimlik anahtar ve başka bir şeyden oluşan bu kümelenmiş dizinleri bilmek istiyorum bir şey – DevilDog
@DevilDog : yanıtımı güncelledi - gereksinimlerinizi şimdi ele almalı –
SELECT s.name AS schema_name, o.name AS object_name, i.name AS index_name
FROM sys.indexes i
JOIN sys.objects o ON i.object_id = o.object_id
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE i.type = 1 -- Clustered index
--AND o.is_ms_shipped = 0 -- Uncomment if you want to see only user objects
AND NOT EXISTS (
SELECT *
FROM sys.index_columns ic INNER JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id
AND c.is_identity = 1 -- Is identity column
)
ORDER BY schema_name, object_name, index_name;
Örnek çıktı (AdventureWorks2008R2):
schema_name object_name index_name
-------------- --------------------------- --------------------------------------------------------------------
HumanResources Employee PK_Employee_BusinessEntityID
HumanResources EmployeeDepartmentHistory PK_EmployeeDepartmentHistory_BusinessEntityID_StartDate_DepartmentID
HumanResources EmployeePayHistory PK_EmployeePayHistory_BusinessEntityID_RateChangeDate
Person BusinessEntityAddress PK_BusinessEntityAddress_BusinessEntityID_AddressID_AddressTypeID
Person BusinessEntityContact PK_BusinessEntityContact_BusinessEntityID_PersonID_ContactTypeID
ardından sorgu size tüm kullanıcı tabloları, sütunlar, veri türü verecek ve sütun küme endeksi parçası ise o/sütunun dizisini döndürür kabuklu dizinde siparişi tersine NULL döndürür.
SELECT U.name [OWNER],O.name [TABLE_NAME],C.name [COLUMN_NAME],T.name [DATA_TYPE],C.length [DATA_LENGTH], x.keyno [Primary_Key_order]
FROM syscolumns C
inner join sysobjects O on O.Id=C.Id and o.xtype='U' -- User Tables
inner join sysusers U on O.Uid=U.UID
inner join systypes T on C.xtype=T.xtype
left outer join (Select O.name [TABLE_NAME] , C.name [COLUMN_NAME], IK.keyno
from syscolumns C
inner join sysobjects O on O.Id=C.Id and O.xtype='U' -- User Tables
join sysindexkeys IK on O.id=IK.ID and C.colid=IK.COLID and Indid=1 -- Only Clustered Index
) x
on x.TABLE_NAME=O.name and X.COLUMN_NAME=C.name
order by U.name
- 1. SQL Server Karma Dizinleri
- 2. Kümelenmiş birincil anahtar, SQL Server 2005
- 3. SQL Server: dökümü/verme veritabanı dizinleri
- 4. SQL Server - Belirli bir veri türünde
- 5. SQL Server'da Kompozit Kümelenmiş Dizin
- 6. SQL sorgusu SQL Server 7 Gün Rolling Ortalama için
- 7. SQL Server tablosu oluşturma tarihi sorgusu
- 8. SQL Server için GROUP_CONCAT
- 9. SQL server 2005 (Management Studio IDE) aşağıdaki T-SQL sorgusu kullanıyorum bir T-SQL sorgusu
- 10. SQL Server 2005'te dizinleri dinamik olarak adlandır? SQL Server biliyorum çalışmak çoğu insan gibi
- 11. SQL Server: Böyle bir SQL sorgusu üzerinde subselect oluşturmaya çalışıyorum
- 12. SQL Server 2005 acemi sorgu
- 13. SQL Server: Ben mantıksal olarak bazı verileri dönmelidir SQL Server üzerinde bir SQL sorgusu çalıştırıyorum verileri
- 14. SQL Server
- 15. SQL Server için Debug.Assert Eşdeğeri
- 16. Maliyet beyanı bulmak için SQL cümlesi
- 17. SQL Server: Bölme Sütun
- 18. SQL Server
- 19. SQL Server 2005
- 20. SQL sorgusu
- 21. SQL sorgusu
- 22. tabloları için koşullu sql sorgusu
- 23. $ _GET SQL sorgusu için çalışmıyor
- 24. SQL sorgusu
- 25. SQL sorgusu
- 26. Tam hiyerarşi yolunu almak için SQL sorgusu
- 27. Zor: SQL Server tarafında
- 28. SQL Server sorgusu yalnızca ilk 1 satırı döndürür
- 29. SQL Server: YYYYMMDDHHMISSMSS
- 30. SQL Server, bir 'durum'
Henüz bir şey denediniz. Meta tablolar sys.indexes ve sys.index_columns ve sys.columns başlamak için bir yer olacaktır. –
Netleştirebilir misiniz? Kümelenmemiş tüm tabloların * sadece * IDENTITY sütununu veya kümelenmiş dizinin herhangi bir yerindeki IDENTITY sütununu içermeyen tüm tabloları istiyor musunuz? –
Aaron, ben sadece ilgilendiğim bir kimlik anahtar – DevilDog