首先认识一下
sysobjects系统表,可以查询出存在在这个数据库里面的系统表信息和用户自己创建的表的信息
syscolumns系统表,可以查询出存在在这个数据库里面的系统表字段数据信息和用户自己创建的表的字段信息
相关链接:将系统表映射到系统视图
1,判断表是否存在
--法1
IF EXISTS(SELECT * FROM sysobjects WHERE name = '@tableName')
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
--法2
IF OBJECT_ID (N'@tableName', N'U') IS NOT NULL
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
2,判断表字段是否存在
--法1
IF EXISTS (SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID WHERE T1.NAME='表名' AND T2.NAME='字段名')
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
--法2
IF COL_LENGTH('表名', '字段名') IS NOT NULL
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
3,判断表索引是否存在
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID('表名', N'U') and NAME='索引名')
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
4,判断约束是否存在
--这个只能以数据库的角度整体判断
IF OBJECT_ID('约束名') IS NOT NULL
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
5,判断存储过程是否存在
IF Exists(select name from sysobjects where NAME = '存储过程名' and type='P')
BEGIN
PRINT '已存在'
END
ELSE
BEGIN
PRINT '不存在'
END
GO
6,判断表数据是否存在
IF NOT EXISTS ( SELECT * FROM [tablename] a WHERE a.[id] = 'b239908d-c61f-4c0c-81ec-e33633e9e15a')
begin
INSERT INTO [dbo].[tablename]([id], [code], [name], [value])
VALUES ('b239908d-c61f-4c0c-81ec-e33633e9e15a', '', '', '');
end
注意:
1,更新表结构、索引;需要验证表字段、索引是否存在,脚本后面需要加go
2,添加数据,需要验证数据是否存在