首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 判斷資料庫物件是否存在的標準腳本大全

     編輯:關於SqlServer

一鍵複製:常用物件存在性檢查與刪除範本

資料庫

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 = '表名'

現代化寫法(SQL Server 2016+ 建議)

-- 統一使用 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

優點:語法簡潔、不依賴舊版系統表、效能更好。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved