テーブル名はScores
です。
次のようにするのは正しいですか?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
次のようにするのは正しいですか?
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による回答 を参照してください。
SQL Server 2016からあなたが使用することができます
DROP TABLE IF EXISTS dbo.Scores
参照: 既存のDROP - 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サーバーは少なくとも基本的なINFORMATION_SCHEMAサポートを提供しています: MySQL 、 Postgres 、 Oracle 、 IBM DB2 、および Microsoft SQL Server 7.0以降 。
実際には動作しないものがたくさんあります。一時テーブルを作成したら、それをtempdbから削除する必要があります。
機能する唯一のコードは次のとおりです。
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
私はこれが役立つことを願っています:
begin try drop table #tempTable end try
begin catch end catch
または
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
引数が既存のテーブルの名前であれば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]
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 OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
dbo.TableName
はあなたの希望するテーブルで、 'U'はあなたのtype
です。 table
。
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
DROP TABLE Scores
GO
私が使う:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end