sqlserver 通过判断执行的一些语句记录
1、判断表中是否有指定数据,如果不存在则添加(INSERT INTO):
INSERT INTO TableName (Column1, Column2, Column3, Column4, Column5) SELECT Value1, Value2, Value3, Value4, Value5 WHERE NOT EXISTS (SELECT PrimaryName FROM TableName WHERE PrimaryName = PrimaryValue)
2、判断表中是否有指定列,如果不存在则添加(ALTER TABLE):
IF NOT EXISTS (SELECT TOP 1 * FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] = 'TableName' AND [COLUMN_NAME] = 'ColumnName') BEGIN ALTER TABLE TableName ADD ColumnName INT NOT NULL DEFAULT 0 END GO
3、如果需要在 ALTER TABLE 后需要立即执行 UPDATE 等语句
方法1:在 ALTER TABLE 语句后写 GO,但是在 BEGIN 和 END 之前就不能这么写了(据说在新版本 SQL SERVER 中可以通过多个 BEGIN 和 END 来达到 GO 的效果,但是老的版本不行)。
方法2:在 ALTER TABLE 语句后,使用 exec ('UPDATE TableName SET ColumnName = Value') 来执行 UPDATE 语句
注意:如果是因为要添加非空列初始化一个固定值的话,可以通过设置 DEFAULT 来解决,不需要单独执行,但如果要根据其它数据条件来初始化,还是需要上述方法单独执行。
4、判断存储过程是否存在,如果存在则删除(DROP PROCEDURE):
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'ProcedureName') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE ProcedureName GO
5、判断表是否存在,如果 存在/不存在 则 删除/创建
if not exists (select * from dbo.sysobjects where id = object_id(N'tablename') and OBJECTPROPERTY(id, N'IsUserTable') = 1) begin CREATE TABLE tablename ( [id] [bigint] IDENTITY(1,1) NOT NULL, [UserId] [bigint] NULL) ON [PRIMARY] end GO
6、判断外键是否存在,如果不存在则创建
IF NOT EXISTS (SELECT * FROM SYS.FOREIGN_KEYS WHERE [NAME] = 'FK_NAME') BEGIN ALTER TABLE [dbo].[tablename] WITH CHECK ADD CONSTRAINT [FK_NAME] FOREIGN KEY([id]) REFERENCES [dbo].[table2name] ([id]) ALTER TABLE [dbo].[tablename] CHECK CONSTRAINT [FK_NAME] END GO
7、判断索引是否存在,如果不存在则创建
IF NOT EXISTS (SELECT * FROM SYSINDEXES WHERE Id = OBJECT_ID('table_name') AND NAME = '_dta_index_name') BEGIN
CREATE NONCLUSTERED INDEX [_dta_index_name] ON [dbo].[table_name]
(
[column_name] ASC,
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
END
GO
参考:https://www.cnblogs.com/li-peng/archive/2013/01/24/2874517.html
END
输了你,赢了世界又如何...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!