sqlConnection.GetSchema("IndexColumns");
에 대한 호출이 실행 명령 조회는이 항목이 있다는 것을 의미 IndexColumns
<MetaDataCollections>
<CollectionName>IndexColumns</CollectionName>
<NumberOfRestrictions>5</NumberOfRestrictions>
<NumberOfIdentifierParts>4</NumberOfIdentifierParts>
<PopulationMechanism>SQLCommand</PopulationMechanism>
<PopulationString>EXEC sys.sp_indexcolumns_managed @Catalog, @Owner, @Table, @ConstraintName, @Column</PopulationString>
<MinimumVersion>10.00.0000</MinimumVersion>
</MetaDataCollections>
을 우리에게 보여줍니다 않습니다 EXEC sys.sp_indexcolumns_managed
을 실행합니다.
이
select distinct
db_Name() as constraint_catalog,
constraint_schema = SCHEMA_NAME(o.schema_id),
constraint_name = x.name,
table_catalog = db_name(),
table_schema = SCHEMA_NAME(o.schema_id),
table_name = o.name,
column_name = c.name,
ordinal_position = xc.key_ordinal,
KeyType = c.system_type_id,
index_name = x.name
from
sys.objects o INNER JOIN sys.indexes x ON
(
o.object_id = x.object_id AND
o.type in ('U')
) INNER JOIN
sys.index_columns xc ON
(
xc.object_id = x.object_id AND
xc.index_id = x.index_id
) INNER JOIN
sys.columns c ON
(
o.object_id = c.object_id AND
xc.column_id = c.column_id
)
(가 Resource Database의 일부이기 때문에 당신은 SELECT OBJECT_DEFINITION(OBJECT_ID('sys.sp_indexcolumns_managed'));
와 정의를 찾을 수 있습니다)
이제 우리는 볼 수 있습니다 : 그것은 sys.spt_indexcolumns_view_managed
에서 선택하고 해당 뷰는 다음과 같이 정의되어 그 저장 프로 시저가 EXEC sp_helptext 'sys.sp_indexcolumns_managed'
와 함께 발표 할 예정이다 칼럼에 KeyType는 열 시스템 유형 sys.columns
ID로서 설명되어
sys.columns.system_type_id
위에 투영된다.
및 Where do I find Sql Server metadata for column datatypes? 세부 사항은 sys.types
에 가입하는 것은 당신에게 열의 종류의 정보를 제공 할 것입니다.해당 정보로
무장 우리가 이미 나는에 KeyType = 56 추측 기본 키을 의미한다는 결론을 내릴 수는 진실하고
select name, system_type_id, user_type_id, schema_id, max_length, precision scale
from sys.types
where system_type_id = 56
이
name system_type_id user_type_id schema_id max_length scale
---- -------------- ------------ --------- ---------- -----
int 56 56 4 4 10
를 반환합니다 실행하지 않으며 그것은이다 columntype이 아니라 기본 키인 경우.
GetSchema 호출 AFAICT를 사용하여 기본 키를 찾는 신뢰할 수있는 방법이없는 것처럼 보입니다. Dan Guzman에서 제공하는 쿼리를 사용하십시오.
이것은 정말 놀라운 형사 작업입니다. 나는 SQL을 그렇게 잘 알지 못하므로 지금까지 절반도 못 갔을 것입니다 - 그리고 나는 당신의 답을 통해 많은 것을 배웠습니다. 그들이 다른 곳에서 _DataType_이라고 정확하게 불리우는 그러한 혼란스러운 이름 _KeyType_을 선택하는 것은 유감입니다. 이 답변은 내가 확인하길 원하는 마법의 숫자 인 '56'의 가장 아래쪽에 있기 때문에 받아 들일 것입니다. 그리고 이것은 미래에 내 자신이 어떻게 할 수있는 몇 가지 새로운 도구를 보여줍니다. _Plan B_ 솔루션으로는 내 이론이 틀린 것으로 판명 된대로 @ 단 길즈 만이 제안한 것으로 전환하십시오. – t3chb0t