Scores
ชื่อตารางคือ
การทำสิ่งต่อไปนี้ถูกต้องหรือไม่
IF EXISTS(SELECT *
FROM dbo.Scores)
DROP TABLE dbo.Scores
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 ที่ทันสมัยให้อย่างน้อยสนับสนุน INFORMATION_SCHEMA พื้นฐานรวมถึง: MySQL , Postgres , ออราเคิล , 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
หรือ:
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
ฉันหวังว่านี่จะช่วยได้:
begin try drop table #tempTable end try
begin catch end catch
ฉันเขียน UDF เล็กน้อยที่คืนค่า 1 ถ้าอาร์กิวเมนต์เป็นชื่อของตารางที่มีอยู่หรือ 0 เป็นอย่างอื่น:
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 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
มีวิธีที่ง่ายกว่า
DROP TABLE IF EXISTS table_name;
วิธีที่ง่ายและเห็นได้ดีขึ้นหากคุณใช้ Visual Studio เพียงแค่เปิดจากแถบเมนู
ดู -> SQL Server Object Explorer
ควรเปิดเหมือนที่แสดงที่นี่
เลือกและคลิกขวาที่ตารางที่คุณต้องการลบจากนั้นลบ ควรแสดงหน้าจอดังกล่าว คลิกอัปเดตฐานข้อมูลเพื่อยืนยัน
วิธีนี้ปลอดภัยมากเพราะให้ผลตอบรับแก่คุณและจะเตือนความสัมพันธ์ของตารางที่ถูกลบกับตารางอื่น ๆ
SQL
Visual Studio
ดังนั้นคำตอบนี้ไม่เกี่ยวข้องกับคำถามนี้
ทำแบบนี้มันเป็นวิธีที่ง่ายที่สุด
qry
จะเป็นแบบสอบถามของคุณเองสิ่งที่คุณต้องการในรายการที่เลือก
set @qry = ' select * into TempData from (' + @qry + ')Tmp '
exec (@qry)
select * from TempData
drop table TempData
'U'
พารามิเตอร์ที่สองดูเหมือนจะหมายถึง "ค้นหาเฉพาะวัตถุที่มีชื่อนี้คือตาราง" แหล่งเดียว ดังนั้นOBJECT_ID('TableName')
ไม่ผิดแต่ก็ไม่แม่นยำเมามันทั้งดังนั้น'U'
ใน @ คำตอบที่ดีมาร์ติน