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