테이블 이름은 Scores
입니다.
다음을 수행하는 것이 맞습니까?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
답변
다음을 수행하는 것이 맞습니까?
IF EXISTS(SELECT * FROM dbo.Scores) DROP TABLE dbo.Scores
아니요 . 테이블에 행이 포함 된 경우에만 테이블이 삭제되고 테이블이 없으면 오류가 발생합니다.
대신 영구 테이블의 경우 사용할 수 있습니다
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
또는 임시 테이블의 경우 사용할 수 있습니다
IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
DROP TABLE #T;
SQL Server 2016+는을 사용하는 더 좋은 방법 DROP TABLE IF EXISTS …
입니다. @Jovan의 답변을 참조하십시오 .
답변
SQL Server 2016부터는
DROP TABLE IF EXISTS dbo.Scores
참조 : DROP IF EXISTS-SQL Server 2016의 새로운 기능
곧 SQL Azure 데이터베이스에있을 것입니다.
답변
ANSI SQL / 크로스 플랫폼 방식은 INFORMATION_SCHEMA 를 사용하는 것으로 , 이는 SQL 데이터베이스 내의 객체에 대한 메타 데이터를 쿼리하도록 특별히 설계되었습니다.
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
drop table dbo.Scores;
대부분의 최신 RDBMS 서버는 최소한 MySQL , Postgres , Oracle , IBM DB2 및 Microsoft SQL Server 7.0 이상을 포함한 기본 INFORMATION_SCHEMA 지원을 제공 합니다.
답변
실제로 작동하지 않는 많은 것을 보았습니다. 임시 테이블을 만들 때 tempdb에서 삭제해야합니다!
작동하는 유일한 코드는 다음과 같습니다.
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
답변
SQL Server 2016 (13.x) 이상에서
DROP TABLE IF EXISTS dbo.Scores
이전 버전에서
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
U는 당신이다table type
답변
또는:
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
답변
이게 도움이 되길 바란다:
begin try drop table #tempTable end try
begin catch end catch