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
相关推荐
oradh5 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl6 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
闻道且行之7 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.8 小时前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨9 小时前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵9 小时前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶9 小时前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
smilejingwei10 小时前
Trae+SQLazy 实践 SQL 国产化移植:Oracle => 达梦
数据库·sql·oracle
意疏11 小时前
2026年远控软件安全横评:六款主流工具逐项核查——官方文档、一手实测与安全事件,全摊开
大数据·前端·数据库
名不经传的养虾人11 小时前
从0到1:企业级AI项目迭代日记 Vol.90|Agent变快了,Judge定下来了
大数据·数据库·人工智能·ai编程·企业ai