SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行

MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行

Oracle 项目中 SQL 脚本更新方式

一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺出错及漏执行SQL

常用的如下:

--如果不存在这条数据,就添加
IF NOT EXISTS (SELECT 1 FROM dbo.Settings WHERE PropertyName = 'DBVersion')
    INSERT INTO dbo.Settings(ID, Code, Value)  VALUES(NEWID(),'DBVersion','2018')
GO
--可以通过版本号控制
IF EXISTS (SELECT 1 FROM dbo.Settings WHERE PropertyName='DBVersion' AND CONVERT(INT, CONVERT(VARCHAR(10), PropertyValue)) <= 2019)
BEGIN
    UPDATE TABLE1 SET Field1 = 'abc' WHERE field2 = 0
    UPDATE TABLE2 SET FIELD2 = '1900-01-01 00:00:00' WHERE [Status] = 1
    UPDATE TABLE3 SET FIELD3 = '1900-01-01 00:00:00' WHERE [Status] = 1
    
    UPDATE dbo.Settings SET PropertyValue = '2020' WHERE PropertyName='DBVersion'
END
GO  
--如果表里不存在字段,就添加
IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TABLE4' AND COLUMN_NAME = 'COLUMN2' AND TABLE_SCHEMA = 'dbo')
BEGIN
    ALTER TABLE TABLE4 Add  COLUMN2 nvarchar(31)
END
GO
--存储过程先删除,再创建
IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'P' AND name = 'PRO_TEST')
DROP PROCEDURE PRO_TEST
GO
CREATE PROCEDURE [dbo].[PRO_TEST]
    @StartDate    DATETIME = NULL,
    @EndDate    DATETIME = NULL,
    @Num    INT = NULL
AS
SELECT * FROM LogTable
WHERE Num = ISNULL(@Num, Num)
    AND CreatedDate >= ISNULL(@StartDate, CreatedDate)
    AND CreatedDate <= ISNULL(@EndDate, CreatedDate) + '23:59:59'
ORDER BY CreatedDate DESC
GO

如果表不存在,创建表

IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'Table_name')
BEGIN
    CREATE TABLE Table_name(
        Id varchar(36),
        HospitalId varchar(36),
        HospitalName nvarchar(80),
        DeptId varchar(36),
        DeptName nvarchar(80)
    );
 
    EXECUTE sp_addextendedproperty N'MS_Description', 'ID', N'user', N'dbo', N'table', N'Sys_DeptProcessRelation', N'column', N'Id';
    EXECUTE sp_addextendedproperty N'MS_Description', '医院ID', N'user', N'dbo', N'table', N'Sys_DeptProcessRelation', N'column', N'HospitalId';
    EXECUTE sp_addextendedproperty N'MS_Description', '医院名称', N'user', N'dbo', N'table', N'Sys_DeptProcessRelation', N'column', N'HospitalName';
    EXECUTE sp_addextendedproperty N'MS_Description', '科室ID', N'user', N'dbo', N'table', N'Sys_DeptProcessRelation', N'column', N'DeptId';
    EXECUTE sp_addextendedproperty N'MS_Description', '科室名称', N'user', N'dbo', N'table', N'Sys_DeptProcessRelation', N'column', N'DeptName';
    PRINT 'Create table Table_name Successfully!';
END
GO
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
26天前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之新建项目的元数据的sql报错,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
21天前
|
SQL 运维 监控
SQL Server 运维常用sql语句(二)
SQL Server 运维常用sql语句(二)
19 3
|
21天前
|
存储 SQL Go
全网最长的sql server巡检脚本分享(1000行)
全网最长的sql server巡检脚本分享(1000行)
29 1
|
21天前
|
SQL XML 运维
SQL Server 运维常用sql语句(三)
SQL Server 运维常用sql语句(三)
11 1
|
26天前
|
SQL 关系型数据库 MySQL
SQL数据库和 SQLserver数据库
【8月更文挑战第19天】SQL数据库和 SQLserver数据库
44 2
|
14天前
|
监控 Java 开发者
揭秘Struts 2性能监控:选对工具与方法,让你的应用跑得更快,赢在起跑线上!
【8月更文挑战第31天】在企业级应用开发中,性能监控对系统的稳定运行至关重要。针对流行的Java EE框架Struts 2,本文探讨了性能监控的工具与方法,包括商用的JProfiler、免费的VisualVM以及Struts 2自带的性能监控插件。通过示例代码展示了如何在实际项目中实施这些监控手段,帮助开发者发现和解决性能瓶颈,确保应用在高并发、高负载环境下稳定运行。选择合适的监控工具需综合考虑项目需求、成本、易用性和可扩展性等因素。
22 0
|
14天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
81 0
|
22天前
|
SQL 存储 Go
SQL Server一键巡检脚本分享
SQL Server一键巡检脚本分享
10 0
|
24天前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
|
SQL 数据库 索引
Sqlserver与access数据库sql语法十大差异
ACCESS结构简单容易处理,而且也能满足多数的网站程序要求,也是初学者的试牛刀。ACCESS是小型数据库,既然是小型就有他根本的局限性: 1)、数据库过大,一般ACCESS数据库达到50M左右的时候性能会急剧下降! 2)、网站访问频繁,经常超过100人的在线时,处理速度会有影响! 3)、记录数过多,一般记录数达到10万条左右的时候性能就会急剧下降!微软公司为了与ACCESS高低搭配的一种高端方案:改用了Sqlserver,但语法会有一些差异。
977 0