OBJECT_ID('name' [, 'type']) 回傳物件識別碼,不存在則回傳 NULL。type 參數可縮小搜尋範圍,提升效能並避免同名不同類型物件誤判。
| 代碼 | 說明 | 適用物件 |
|---|---|---|
| U | USER_TABLE | 使用者資料表 |
| V | VIEW | 檢視表 |
| P | SQL_STORED_PROCEDURE | 預存程序 |
| FN | SQL_SCALAR_FUNCTION | 純量函數 |
| IF | SQL_INLINE_TABLE_VALUED_FUNCTION | 內嵌表值函數 |
| TF | SQL_TABLE_VALUED_FUNCTION | 多陳述式表值函數 |
| TR | SQL_TRIGGER | 觸發器 |
| PK | PRIMARY_KEY_CONSTRAINT | 主鍵約束 |
| F | FOREIGN_KEY_CONSTRAINT | 外鍵約束 |
| D | DEFAULT_CONSTRAINT | 預設約束 |
| C | CHECK_CONSTRAINT | 檢查約束 |
完整清單:SELECT DISTINCT type, type_desc FROM sys.objects;
IF OBJECT_ID(N'dbo.MyTable', N'U') IS NOT NULL
PRINT N'存在';
ELSE
PRINT N'不存在';
IF OBJECT_ID(N'tempdb..#MyTemp', N'U') IS NOT NULL
PRINT N'存在';
注意:必須指定 tempdb.. 前綴,否則搜尋目前資料庫找不到。
IF OBJECT_ID(N'tempdb..##MyGlobalTemp', N'U') IS NOT NULL
PRINT N'存在';
IF OBJECT_ID(N'dbo.MyView', N'V') IS NOT NULL
DROP VIEW dbo.MyView;
IF OBJECT_ID(N'dbo.MyProc', N'P') IS NOT NULL
DROP PROCEDURE dbo.MyProc;
IF OBJECT_ID(N'dbo.MyFunc', N'FN') IS NOT NULL
OR OBJECT_ID(N'dbo.MyFunc', N'IF') IS NOT NULL
OR OBJECT_ID(N'dbo.MyFunc', N'TF') IS NOT NULL
DROP FUNCTION dbo.MyFunc;
或簡寫:IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.MyFunc') AND type IN (N'FN',N'IF',N'TF'))
IF COL_LENGTH(N'dbo.MyTable', N'MyColumn') IS NOT NULL
PRINT N'欄位存在';
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = N'MyDB')
PRINT N'資料庫存在';
-- 安全移除資料表 (含約束)
IF OBJECT_ID(N'dbo.OrderDetail', N'U') IS NOT NULL BEGIN
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + N'.' + QUOTENAME(OBJECT_NAME(parent_object_id))
+ N' DROP CONSTRAINT ' + QUOTENAME(name) + N'; '
FROM sys.objects WHERE type = 'F' AND referenced_object_id = OBJECT_ID(N'dbo.OrderDetail');
EXEC sp_executesql @sql;
DROP TABLE dbo.OrderDetail;
END
-- 不建議新代碼使用
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE id = OBJECT_ID(N'dbo.MyTable') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
PRINT N'存在';
OBJECT_ID() + 兩部分名稱 Schema.Object + 明確 type 參數。tempdb.. 前綴。COL_LENGTH(),比查詢 INFORMATION_SCHEMA.COLUMNS 更輕量。