IF EXISTS (SELECT * FROM master..sysdatabases WHERE name = N'資料庫名')
PRINT 'exists'
ELSE
PRINT 'not exists'
IF EXISTS (
SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[表名]')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1
)
DROP TABLE [dbo].[表名]
GO
IF OBJECT_ID('Tempdb.dbo.#TempTable') IS NOT NULL
PRINT '存在'
ELSE
PRINT '不存在'
IF EXISTS (
SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[程序名]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1
)
DROP PROCEDURE [dbo].[程序名]
GO
IF EXISTS (
SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[檢視名]')
AND OBJECTPROPERTY(id, N'IsView') = 1
)
DROP VIEW [dbo].[檢視名]
GO
IF EXISTS (
SELECT * FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[函數名]')
AND xtype IN (N'FN', N'IF', N'TF')
)
DROP FUNCTION [dbo].[函數名]
GO
IF COL_LENGTH('表名', '欄位名') IS NULL
PRINT '不存在'
-- 或
SELECT 1 FROM sysobjects
WHERE id IN (SELECT id FROM syscolumns WHERE name = '欄位名')
AND name = '表名'
-- 統一使用 OBJECT_ID + 類型判斷
IF OBJECT_ID('dbo.表名', 'U') IS NOT NULL DROP TABLE dbo.表名;
IF OBJECT_ID('dbo.程序名', 'P') IS NOT NULL DROP PROCEDURE dbo.程序名;
IF OBJECT_ID('dbo.檢視名', 'V') IS NOT NULL DROP VIEW dbo.檢視名;
IF OBJECT_ID('dbo.函數名', 'FN') IS NOT NULL DROP FUNCTION dbo.函數名; -- 含 IF, TF
優點:語法簡潔、不依賴舊版系統表、效能更好。