T-SQL在SQL Server中判断表、字段、索引、视图、触发器、Synonym等是否存在

SQL Server创建或者删除表、字段、索引、视图、触发器前判断是否存在。

目录

[1. SQL Server创建表之前判断表是否存在](#1. SQL Server创建表之前判断表是否存在)

[2. SQL Server新增字段之前判断是否存在](#2. SQL Server新增字段之前判断是否存在)

[3. SQL Server删除字段之前判断是否存在](#3. SQL Server删除字段之前判断是否存在)

[4. SQL Server新增索引之前判断是否存在](#4. SQL Server新增索引之前判断是否存在)

[5. SQL Server判断视图是否存在并创建](#5. SQL Server判断视图是否存在并创建)

[6. SQL Server判断触发器是否存在并创建](#6. SQL Server判断触发器是否存在并创建)

[7. 创建SYNONYM 之前判断是否存在](#7. 创建SYNONYM 之前判断是否存在)


1. SQL Server创建表之前判断表是否存在

sql 复制代码
IF OBJECT_ID('[dbo].[Documents]', 'U') IS  NULL  
begin
    -- This table used to save recent 2 years documents
    CREATE TABLE [dbo].[Documents] (
        [Id]                        INT             NOT NULL,
        [DocumentGroupId]           INT             NOT NULL,
        [FileName]                  VARCHAR (200)   NULL,
        [FilePath]                  VARCHAR (250)   NULL,
        [CreateDate]                DATETIME        NOT NULL,
        [ModifyDate]                DATETIME        NOT NULL,
        [DocumentStatus]            VARCHAR (2)     NULL
    )


END
GO

2. SQL Server新增字段之前判断是否存在

sql 复制代码
--[dbo].[AgencyDocuments] table name
--EffectiveDateTest column name. 此处不可以用[EffectiveDateTest]
if COL_LENGTH('[dbo].[AgencyDocuments]','EffectiveDateTest') is null
begin
	alter table [dbo].[AgencyDocuments] add [EffectiveDateTest] DATETIME NULL
end
go

3. SQL Server删除字段之前判断是否存在

sql 复制代码
--[dbo].[AgencyDocuments] table name
--EffectiveDateTest column name. 此处不可以用[EffectiveDateTest]
if COL_LENGTH('[dbo].[AgencyDocuments]','EffectiveDateTest') is NOT null
begin
	alter table [dbo].[AgencyDocuments] drop column [EffectiveDateTest] 
end
go

4. SQL Server新增索引之前判断是否存在

sql 复制代码
IF NOT EXISTS (SELECT top 1 1 FROM sys.indexes  WHERE name='IX_AgencyDocument_Id' AND object_id = OBJECT_ID('[dbo].[AgencyDocuments]'))
BEGIN    
    CREATE NONCLUSTERED INDEX IX_AgencyDocument_Id ON [dbo].[AgencyDocuments] ([Id])
	    INCLUDE ([DocumentGroupId],[FileName],[FilePath],[CreateDate],[DocumentStatus])
END
GO

5. SQL Server判断视图是否存在并创建

sql 复制代码
-- View存在则删除
IF OBJECT_ID('vw_AgencyDocuments') IS NOT NULL
begin
	drop view  vw_AgencyDocuments
end
GO
--创建View
create view vw_AgencyDocuments as 
select Id from [dbo].[AgencyDocuments]
go

6. SQL Server判断触发器是否存在并创建

sql 复制代码
-- 判断是否存在,存在则删除
IF OBJECT_ID ('[dbo].[TRIGGER_INSERT_AGENCYDOCUMENTS]', 'TR') IS NOT NULL 
begin
	drop trigger [dbo].[TRIGGER_INSERT_AGENCYDOCUMENTS]  
end
GO

-- 创新新的触发器
CREATE TRIGGER [dbo].[TRIGGER_UPDATE_AGENCYDOCUMENTS] ON [dbo].[Document] AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE m
        SET [ModifyDate] = n.[ModifyDate]  
        ,[Status] = n.[Status]      
        ,[DocumentStatus] = n.[DocumentStatus] 
    FROM [dbo].[AgencyDocuments] m JOIN INSERTED n on m.Id=n.Id 

    SET NOCOUNT OFF;
END

GO

7. 创建SYNONYM 之前判断是否存在

sql 复制代码
if not exists (select * from sys.synonyms where object_id=OBJECT_ID('[dbo].[AgencyDocuments]'))
begin
    CREATE SYNONYM [dbo].[AgencyDocuments] FOR [ABC_REPL].[dbo].[AgencyDocuments]
end
go
相关推荐
Joseit3 小时前
AI应用生成平台:数据库、缓存与存储
数据库·人工智能·缓存
迎風吹頭髮5 小时前
UNIX下C语言编程与实践9-UNIX 动态库创建实战:gcc 参数 -fpic、-shared 的作用与动态库生成步骤
c语言·数据库·unix
黑马金牌编程6 小时前
深入浅出 Redis:从核心原理到运维实战指南一
数据库·redis·缓存·性能优化·非关系型数据库
李迟6 小时前
2025年9月个人工作生活总结
服务器·数据库·生活
野犬寒鸦8 小时前
从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略
java·数据库·redis·后端·spring·缓存
茉莉玫瑰花茶9 小时前
Redis - Bitfield 类型
数据库·redis·缓存
lang201509289 小时前
MySQL InnoDB备份恢复全指南
数据库·mysql
爱吃香蕉的阿豪10 小时前
.NET Core 中 System.Text.Json 与 Newtonsoft.Json 深度对比:用法、性能与场景选型
数据库·json·.netcore
mpHH10 小时前
postgresql中的默认列
数据库·postgresql
jllws110 小时前
数据库原理及应用_数据库基础_第4章关系模型的基本理论_数据库完整性规则和MySQL提供的约束
数据库