web-dev-qa-db-ja.com

SQL Serverにテーブルが存在する場合にテーブルを削除する方法

テーブル名はScoresです。

次のようにするのは正しいですか?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores 
637
tmaster

次のようにするのは正しいですか?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

No。テーブルに行が含まれている場合にのみテーブルを削除します(テーブルが存在しない場合はエラーになります)。

代わりに、永続的なテーブルのためにあなたは使うことができます

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による回答 を参照してください。

1235
Martin Smith

SQL Server 2016からあなたが使用することができます

DROP TABLE IF EXISTS dbo.Scores

参照: 既存のDROP - SQL Server 2016の新機能

もうすぐSQL Azureデータベースに含まれる予定です。

291
Jovan MSFT

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サーバーは少なくとも基本的なINFORMATION_SCHEMAサポートを提供しています: MySQLPostgresOracleIBM DB2 、および Microsoft SQL Server 7.0以降

143
jveazey

実際には動作しないものがたくさんあります。一時テーブルを作成したら、それをtempdbから削除する必要があります。

機能する唯一のコードは次のとおりです。

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"
59
Biondo86

私はこれが役立つことを願っています:

begin try drop table #tempTable end try
begin catch end catch
24
vlad

または

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores
24
sventevit

引数が既存のテーブルの名前であれば1を返し、そうでなければ0を返す小さなUDFを書きました。

CREATE FUNCTION [dbo].[Table_exists]
(
    @TableName VARCHAR(200)
)
    RETURNS BIT
AS
BEGIN
    If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
        RETURN 1;

    RETURN 0;
END

GO

テーブルUserが存在する場合、それを削除するには、次のようにして呼び出します。

IF [dbo].[Table_exists]('User') = 1 Drop table [User]
19
Mansfield

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です

15
Farhan Yaseen

簡単です:

IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName

dbo.TableNameはあなたの希望するテーブルで、 'U'はあなたのtypeです。 table

7
Arsman Ahmad
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO
4
Alfaiz Ahmed

私が使う:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end
3
user7463511