SQL Server 2008의 SQL Server 데이터베이스에 테이블이 있는지 어떻게 확인합니까?


답변:


18

sysobjects 테이블을 쿼리하면

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype = 'U'는 사용자 테이블입니다

그런 다음 IF EXISTS 문입니다.

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 

5
+1 Microsoft는 SQL Server 2005 이후로 이와 같은 기능을 DMV (Dynamic Management Views)로 옮겼다는 점에 유의해야합니다. 기술적으로 작동하지만 이제는 sys.tables DMV를 사용하는 것이 좋습니다. 존재하는 경우 (SELECT * FROM sys.tables WHERE type = 'U'AND name = 'yourTableName'). 기능적으로, 당신의 진술과 나의 진술은 똑같은 일을합니다. DMV를 언급하고 싶었습니다. DMV에 대한 자세한 내용은 msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M

잘 했어 매트. 오래된 습관은 열심히 죽습니다 :-) 당신은 더 나은 방법입니다.
Miles D

1
그것이 큰 차이가 있는지 확실하지 않지만 IF EXISTS를 선호한다면 (sys.tables에서 SELECT 1 ...)
David Hayes

@DavidHayes 예,이 솔루션은 열 이름을 찾기 위해 쿼리하지 않기 때문에 더 빠릅니다.
Xriuk

12

그것을 찾는 또 다른 방법이 있습니다.

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'

훌륭하고 간단하며 복잡한 시스템 테이블을 쿼리 할 필요가 없습니다. 감사!
Shadow Wizard is Ear for You

2
예를 들어 같은 이름의 뷰를 감지하지 못합니까? 아마도 저장 프로 시저와 같은가?
MarioDS

개체를 스키마로 한정하면 아닙니다.
Grant Fritchey

1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.