T-SQL在SQL Server中判断表、字段、索引、视图、触发器、Synonym等是否存在
SQL Server创建或者删除表、字段、索引、视图、触发器前判断是否存在。
目录
1. SQL Server创建表之前判断表是否存在
2. SQL Server新增字段之前判断是否存在
3. SQL Server删除字段之前判断是否存在
4. SQL Server新增索引之前判断是否存在
5. SQL Server判断视图是否存在并创建
6. SQL Server判断触发器是否存在并创建
7. 创建SYNONYM 之前判断是否存在
1. SQL Server创建表之前判断表是否存在
IF OBJECT_ID('[dbo].[Documents]', 'U') IS NULL
begin-- This table used to save recent 2 years documentsCREATE 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新增字段之前判断是否存在
--[dbo].[AgencyDocuments] table name
--EffectiveDateTest column name. 此处不可以用[EffectiveDateTest]
if COL_LENGTH('[dbo].[AgencyDocuments]','EffectiveDateTest') is null
beginalter table [dbo].[AgencyDocuments] add [EffectiveDateTest] DATETIME NULL
end
go
3. SQL Server删除字段之前判断是否存在
--[dbo].[AgencyDocuments] table name
--EffectiveDateTest column name. 此处不可以用[EffectiveDateTest]
if COL_LENGTH('[dbo].[AgencyDocuments]','EffectiveDateTest') is NOT null
beginalter table [dbo].[AgencyDocuments] drop column [EffectiveDateTest]
end
go
4. SQL Server新增索引之前判断是否存在
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判断视图是否存在并创建
-- View存在则删除
IF OBJECT_ID('vw_AgencyDocuments') IS NOT NULL
begindrop view vw_AgencyDocuments
end
GO
--创建View
create view vw_AgencyDocuments as
select Id from [dbo].[AgencyDocuments]
go
6. SQL Server判断触发器是否存在并创建
-- 判断是否存在,存在则删除
IF OBJECT_ID ('[dbo].[TRIGGER_INSERT_AGENCYDOCUMENTS]', 'TR') IS NOT NULL
begindrop trigger [dbo].[TRIGGER_INSERT_AGENCYDOCUMENTS]
end
GO-- 创新新的触发器
CREATE TRIGGER [dbo].[TRIGGER_UPDATE_AGENCYDOCUMENTS] ON [dbo].[Document] AFTER UPDATE
AS
BEGINSET NOCOUNT ON;UPDATE mSET [ModifyDate] = n.[ModifyDate] ,[Status] = n.[Status] ,[DocumentStatus] = n.[DocumentStatus] FROM [dbo].[AgencyDocuments] m JOIN INSERTED n on m.Id=n.Id SET NOCOUNT OFF;
ENDGO
7. 创建SYNONYM 之前判断是否存在
if not exists (select * from sys.synonyms where object_id=OBJECT_ID('[dbo].[AgencyDocuments]'))
beginCREATE SYNONYM [dbo].[AgencyDocuments] FOR [ABC_REPL].[dbo].[AgencyDocuments]
end
go