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
相关推荐
五阿哥永琪7 小时前
MySQL 慢查询定位与 SQL 性能优化实战指南
sql·mysql·性能优化
DolphinDB智臾科技7 小时前
DolphinDB 面向金融交易与定价的统一数据模型
数据库·时序数据库
檀越剑指大厂7 小时前
时序数据库性能之战:金仓数据库如何在复杂场景下反超 InfluxDB?
数据库·时序数据库
计算机毕设VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
数据与人8 小时前
mongodb报错Sort exceeded memory limit of 104857600 bytes
数据库·mongodb
程序员鱼皮8 小时前
消息队列从入门到跑路,保姆级教程!傻子可懂
数据库·程序员·消息队列
C++业余爱好者8 小时前
SQL语言家族入门指南:标准SQL、T-SQL与PL/SQL详解
数据库·sql
白衣衬衫 两袖清风8 小时前
ABP框架+Dapper执行原生sql
sql·c#·.net
白驹过隙^^8 小时前
OB-USP-AGENT安装使用方法
数据库·经验分享·网络协议·tcp/ip·github·ssl
计算机程序设计小李同学8 小时前
基于Python的在线零食购物商城系统的设计与实现
数据库·sqlite