【问题标题】:Create or Alter for Tables in T-SQL在 T-SQL 中为表创建或更改
【发布时间】:2021-11-06 00:22:30
【问题描述】:

我在 SQL Server 上创建了一个表,其中包含最少的列,其中包含数据。

现在我必须使用每次部署完成时运行的 create table 命令维护一个 SQL 脚本。所以我正在检查表是否已经存在,如果不存在,我创建表 -

IF NOT EXISTS (SELECT * 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'TestTable')
CREATE TABLE TestTable (
    col1 INT,
    col2 INT
);

如果我希望表的架构经常更改,我如何轻松维护此脚本以允许更改表,而无需手动执行命令。

理想的解决方案是对表使用 CREATE OR ALTER。但最好的选择是什么?

【问题讨论】:

  • “如果我希望表的架构经常更改” 这本身就是一个缺陷;表的定义不应该不断变化。
  • 我建议你开始使用 Visual Studio 数据库项目。这些会自动生成正确的更改脚本并跟踪更改。 stackoverflow.com/questions/60511228/…
  • @Larnu,虽然这对于瀑布式 SDLC 来说可能是正确的,但频繁的模式更改在敏捷世界中很常见,尤其是在开发环境中。这需要策略、CI/CD 流程和工具。

标签: sql sql-server tsql create-table alter-table


【解决方案1】:

我通常会确保我的所有脚本都是可重新制作的并且损害最小。

这是我的表格脚本模板。 我确实有存储过程等。 这具有将所有相关脚本部署为版本的数据库包部分的生态系统。

USE [YourDB];
GO
IF OBJECT_ID('<Name of the Schema, sysname, dbo>.<Table name, sysname, >') IS NOT NULL
BEGIN
    SET NOEXEC ON;
END
GO
    CREATE TABLE [<Name of the Schema, sysname, dbo>].[<Table name, sysname, >]
    (
    ,CONSTRAINT [PK_<Table name, sysname, >] PRIMARY KEY CLUSTERED 
    (
        [] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,DATA_COMPRESSION = PAGE) 
    );

GO
SET NOEXEC OFF;
GO

参考类似deployment system

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 2018-09-07
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多