回答:
以下を行うことは正しいですか?
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 /クロスプラットフォームの方法は、SQLデータベース内のオブジェクトに関するメタデータをクエリするように特別に設計されたINFORMATION_SCHEMAを使用することです。
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(およびそれ以上)が含まれます。
if exists
ANSI準拠しましたか?
実際に機能しない多くの人を見てきました。一時テーブルが作成されたら、tempdbから削除する必要があります。
機能する唯一のコードは次のとおりです。
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
dbo
しtempdb
ました。また'u'
、承認された回答のコメントに記載されているを追加することをお勧めします。したがって、完全なIFステートメントは次のようになりますIF OBJECT_ID('tempdb..#temp', 'U')
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
引数が現存するテーブルの名前である場合は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]
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
もっと簡単な方法があります
DROP TABLE IF EXISTS table_name;
Visual Studioを使用している場合は、視覚的で簡単な方法で、メニューバーから開くだけです。
表示-> SQL Serverオブジェクトエクスプローラー
ここに示すように開くはずです
削除するテーブルを選択して右クリックし、削除します。そのような画面が表示されます。[データベースの更新]をクリックして確認します。
この方法はフィードバックを提供し、削除されたテーブルと他のテーブルとの関係を警告するため、非常に安全です。
SQL
おり、には関連していませんVisual Studio
。したがって、この回答はこの質問には関係ありません。
このようにしてください、それが最も簡単な方法です。
qry
選択リストで必要なものは何でも、独自のクエリになります。
set @qry = ' select * into TempData from (' + @qry + ')Tmp '
exec (@qry)
select * from TempData
drop table TempData
'U'
2番目のパラメーターのforは、明らかに「この名前でテーブルであるオブジェクトのみを探す」ことを意味します。 1つのソース。だから間違いでOBJECT_ID('TableName')
はありませんが、それもめちゃくちゃ正確ではないので'U'
、@ Martinの優れた答えでは。