선택한 데이터베이스의 모든 테이블에서 기본 키 (있는 경우), ID (있는 경우) 및 'ID'(있는 경우)라는 열을 가져와야합니다. 작업을 수행 할 SQL 쿼리가 있지만 쿼리는 기본 키에 "아니오"와 "예"값이 모두있는 레코드를 반환합니다. 따라서 여러 행의 데이터가 생성되었으므로 DISTINCT라는 단어를 사용하여 중복을 제거했습니다. 나는 이것이 일부 열에 정의 된 인덱스 때문이라고 가정하고 있습니다.
이 문제를 어떻게 해결할 수 있습니까?
사용 된 SQL 쿼리 :
SELECT DISTINCT
object_name(i.object_id) [Table],
c.name [Column],
IIF(i.is_primary_key = 1, 'Yes', 'No') [PK],
IIF(c.is_identity = 1, 'Yes', 'No') [Identity],
IIF(UPPER(c.name) = 'ID', 'Yes', 'No') [Named ID]
FROM sys.indexes i
INNER JOIN sys.columns c ON c.object_id = i.object_id
INNER JOIN sys.identity_columns idc ON idc.object_id = c.object_id AND idc.column_id = c.column_id
WHERE
i.is_primary_key = 1 OR c.is_identity = 1 OR c.name = 'ID'
ORDER BY [Table];
앞으로 비슷한 것이 필요한 사람을 위해 Peter의 답변 버전을 채택했습니다 (Sean Lange의 sys.tables 사용에 대한 조언 포함).
SELECT
t.name AS [Table],
c.name AS [Column],
CASE i.is_primary_key WHEN 1 THEN 'Yes' ELSE 'No' END [PK],
CASE idc.is_identity WHEN 1 THEN 'Yes' ELSE 'No' END [Identity],
CASE c.name WHEN 'ID' THEN 'Yes' ELSE 'No' END [Named ID]
FROM
sys.tables t
LEFT JOIN sys.columns c ON c.object_id = t.object_id
LEFT JOIN sys.identity_columns idc ON idc.object_id = t.object_id AND idc.column_id = c.column_id AND idc.is_identity = 1
LEFT JOIN sys.index_columns ic ON ic.object_id = t.object_id AND ic.column_id = c.column_id
LEFT JOIN sys.indexes i ON i.object_id = t.object_id AND i.index_id = ic.index_id AND i.is_primary_key = 1
WHERE t.type = 'U' AND (idc.is_identity = 1 OR i.is_primary_key = 1 OR c.name = 'ID')
ORDER BY t.name, c.name;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다