Nama tabelnya adalah Scores
.
Apakah benar melakukan hal berikut?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
Nama tabelnya adalah Scores
.
Apakah benar melakukan hal berikut?
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
Jawaban:
Apakah benar melakukan hal berikut?
IF EXISTS(SELECT * FROM dbo.Scores) DROP TABLE dbo.Scores
Tidak. Itu akan menjatuhkan tabel hanya jika mengandung baris (dan akan menimbulkan kesalahan jika tabel tidak ada).
Sebagai gantinya, untuk tabel permanen bisa Anda gunakan
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
Atau, untuk tabel sementara yang bisa Anda gunakan
IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
DROP TABLE #T;
SQL Server 2016+ memiliki cara yang lebih baik, menggunakan DROP TABLE IF EXISTS …
. Lihat jawabannya oleh @Jovan .
Dari SQL Server 2016 Anda dapat menggunakan
DROP TABLE IF EXISTS dbo.Scores
Referensi: DROP JIKA ADA - hal baru di SQL Server 2016
Ini akan segera di SQL Azure Database.
Cara ANSI SQL / lintas-platform adalah dengan menggunakan INFORMATION_SCHEMA , yang secara khusus dirancang untuk meminta data meta tentang objek dalam database SQL.
if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
drop table dbo.Scores;
Sebagian besar server RDBMS modern menyediakan, setidaknya, dukungan dasar INFORMATION_SCHEMA, termasuk: MySQL , Postgres , Oracle , IBM DB2 , dan Microsoft SQL Server 7.0 (dan lebih besar) .
if exists
ansi sesuai?
Telah melihat begitu banyak yang tidak benar-benar berfungsi. ketika tabel temp dibuat, itu harus dihapus dari tempdb!
Satu-satunya kode yang berfungsi adalah:
IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL --Remove dbo here
DROP TABLE #tempdbname -- Remoeve "tempdb.dbo"
dbo
untuk tempdb
menjadikan ini berfungsi. Saya juga ingin menyarankan untuk menambahkan 'u'
seperti yang disebutkan dalam komentar jawaban yang diterima. Dengan demikian, pernyataan IF lengkap akan terlihat seperti ini:IF OBJECT_ID('tempdb..#temp', 'U')
Di SQL Server 2016 (13.x) dan di atasnya
DROP TABLE IF EXISTS dbo.Scores
Dalam versi sebelumnya
IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL
DROP TABLE dbo.Scores;
Kamu adalah milikmutable type
Atau:
if exists (select * from sys.objects where name = 'Scores' and type = 'u')
drop table Scores
if exists (select * from sys.tables where name = 'Scores') drop table Scores
Saya menulis UDF kecil yang mengembalikan 1 jika argumennya adalah nama tabel yang masih ada, 0 sebaliknya:
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
Untuk menghapus tabel User
jika ada, panggil seperti itu:
IF [dbo].[Table_exists]('User') = 1 Drop table [User]
Sederhana itu:
IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName
di mana dbo.TableName
meja yang Anda inginkan dan 'U' adalah type
milik Anda table
.
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
DROP TABLE Scores
GO
Saya menggunakan:
if exists (select *
from sys.tables
where name = 'tableName'
and schema_id = schema_id('dbo'))
begin
drop table dbo.tableName
end
Ada cara yang lebih mudah
DROP TABLE IF EXISTS table_name;
Cara visual yang lebih baik dan mudah, jika Anda menggunakan Visual Studio, cukup buka dari menu bar,
Lihat -> SQL Server Object Explorer
itu harus terbuka seperti yang ditunjukkan di sini
Pilih dan Klik Kanan Tabel yang ingin Anda hapus, lalu hapus. Layar seperti itu harus ditampilkan. Klik Perbarui Database untuk mengonfirmasi.
Metode ini sangat aman karena memberi Anda umpan balik dan akan memperingatkan hubungan apa pun dari tabel yang dihapus dengan tabel lainnya.
SQL
, tidak terkait dengan Visual Studio
. Karena itu, jawaban ini tidak relevan dengan pertanyaan ini.
Lakukan seperti ini, itu adalah cara termudah.
qry
akan menjadi permintaan Anda sendiri, apa pun yang Anda inginkan dalam daftar pilih.
set @qry = ' select * into TempData from (' + @qry + ')Tmp '
exec (@qry)
select * from TempData
drop table TempData
'U'
untuk param kedua tampaknya berarti "Hanya mencari objek dengan nama ini yang merupakan tabel". Satu sumber . JadiOBJECT_ID('TableName')
tidak salah , tapi juga tidak tepat, jadi'U'
dalam jawaban yang sangat bagus dari @ Martin.