2015-01-22 2 views
0

특정 열이 데이터베이스의 어느 테이블에 있는지 알고 싶었습니다. 그래서 sys.columns를 where 조건과 함께 사용했습니다. 그러면 object_id가 생겼습니다.sys.columns는 sys.tables에없는 세부 사항을 보여줍니다.

select * from sys.columns where name like 'mycol%' 

다음 sys.tables에서와 같이 위의 쿼리에서받은 object_id에서이 테이블의 실제 이름을 찾습니다. 그러나 select 문은 빈 결과를 반환합니다. 이 테이블이 데이터베이스에 존재하지 않는다는 것을 의미합니까? 그렇다면 sys.columns가 찾고있는 열이이 object_id가있는 테이블에 있다고 어떻게 말합니까?

select * from sys.tables where object_id='584895884' 

나는 그것이 테이블 없다는 것을 의미하지만, 2014 년

답변

1

마이크로 소프트 SQL 서버를 사용하고 뷰 또는 테이블 반환 함수 또는 오브젝트의 여러 가지 다른 유형 중 하나 중 하나. 대신를 사용

SELECT * 
FROM sys.objects 
WHERE [object_id] = 584895884; 

[object_id] 필드가 숫자가 아닌 문자열이므로 인용되지 않아야 함을 유의하시기 바랍니다.

또한 단일 쿼리에서이 작업을 수행 할 수 있습니다.

SELECT * 
FROM sys.columns sc 
INNER JOIN sys.objects so 
     ON so.[object_id] = sc.[object_id] 
WHERE sc.name LIKE N'mycol%'; 

typesys.objects에서 type_desc 필드는 열에서 발견되는 개체의 유형을 나타냅니다 내 데이터베이스 중 하나에 표시되는 가능성은 :

type_desc (타입)


CLR_TABLE_VALUED_FUNCTION (FT)
INTERNAL_TABLE (IT) 01
SQL_TABLE_VALUED_FUNCTION (TF)가
SYSTEM_TABLE (S)
TYPE_TABLE (TT)
USER_TABLE (U)
VIEW (V)

sys.tables 시스템 뷰에서만 객체를 포함한다 (IF) 23, SQL_INLINE_TABLE_VALUED_FUNCTION 유형은 U/USER_TABLE입니다.

+0

고맙습니다. 작동합니다. sys.tables는 U/USER_TABLE 만 포함하는 sys.objects의 하위 집합과 같습니까? . sys.objects에는 위에서 나열한 많은 유형이 포함되어 있습니다. – IAMTubby

+1

@IAMTubby 예, 'sys.views','sys.sql_modules' (프로 시저, 함수, 뷰, 아마도 트리거) 등 많은 객체 유형별 시스템 뷰가 있습니다. 그러나 이것들은 'sys.objects'의 필터링 된 뷰; 대부분/대부분은 해당 오브젝트 유형에 특정한 추가 또는 다른 필드를 포함합니다. 모든 옵션에 대해 'SELECT * FROM sys.system_views;'의 결과를 살펴보십시오. –

관련 문제