AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 293970
Accepted
tnk479
tnk479
Asked: 2021-06-09 14:23:30 +0800 CST2021-06-09 14:23:30 +0800 CST 2021-06-09 14:23:30 +0800 CST

Visual Studio 数据工具 (SSDT) 架构比较工具似乎无法正常工作

  • 772

我最近开始使用 SSDT 架构以及数据和比较工具。多年来,我一直在使用 Red Gate 的 SQL 比较和 SQL 数据比较,但我认为 VS 工具可能就足够了,我想看看我是否可以忍受它们。在过去的几个月里,它们一直运行良好,但今天在比较本地数据库和 Azure SQL 数据库之间的架构时,我得到了一个奇怪的结果,我想为 Web 应用程序部署更改。架构比较已将若干列标记为不同,并指示它们将被删除。实际上,添加了一个新列。但是,其他列中的任何内容都没有改变。我勾选了“忽略列顺序”框,以便不考虑列顺序。

这是它的样子:

在此处输入图像描述

只是颜色不对吗?即使没有任何变化,它是否会实际删除 PermitLimit 列并重新创建它?我是否需要设置其他一些设置,以便这些相同的列不会被突出显示为有差异?

sql-server ssdt
  • 1 1 个回答
  • 877 Views

1 个回答

  • Voted
  1. Best Answer
    Josh Darnell
    2021-06-10T06:12:04+08:002021-06-10T06:12:04+08:00

    模式比较 UI 有时会在面对这样的多个更改时有点混乱。您应该使用“生成脚本”按钮来查看在运行时将进行哪些实际更改。通常,您希望您的测试运行与您实际部署更改的方式尽可能相似。

    在您的情况下,导致混淆的组合是:

    • 一些列正在重新排序
    • 一些默认约束正在转换为命名约束

    我可以通过创建此表并在本地部署它来重复您的问题:

    CREATE TABLE dbo.TableA
    (
        Id int NOT NULL,
        ABitColumn bit NOT NULL DEFAULT ((1)),
        AStringColumn varchar(10) NOT NULL,
        AnIntColumn int NULL,
    
        CONSTRAINT PK_TableA PRIMARY KEY (Id)
    )
    

    现在,我可以更改源文件以重新排序 int 和 string 列,架构比较工具将默认显示该更改:

    CREATE TABLE dbo.TableA
    (
        Id int NOT NULL,
        ABitColumn bit NOT NULL DEFAULT ((1)),
        AnIntColumn int NULL,
        AStringColumn varchar(10) NOT NULL,
    
        CONSTRAINT PK_TableA PRIMARY KEY (Id)
    )
    

    SSDT 模式比较的屏幕截图显示列将被重新排序

    正如您所提到的,我可以使用小齿轮图标启用“忽略列顺序”设置,然后架构比较显示没有任何变化。

    已选中“忽略列顺序”的架构比较选项窗口的屏幕截图

    如果我然后去给我的默​​认约束命名:

    CREATE TABLE dbo.TableA
    (
        Id int NOT NULL,
        ABitColumn bit NOT NULL CONSTRAINT DF_TableA_ABitColumn DEFAULT ((1)),
        AnIntColumn int NULL,
        AStringColumn varchar(10) NOT NULL,
    
        CONSTRAINT PK_TableA PRIMARY KEY (Id)
    )
    

    架构比较显示列顺序更改和约束名称更改,即使我仍然选中了“忽略列顺序”:

    SSDT 模式比较工具的屏幕截图,显示约束和列顺序更改

    查看实际将进行哪些更改的更可靠方法是单击工具栏中的“生成脚本”按钮:

    生成脚本按钮的屏幕截图,看起来像一张纸

    生成的脚本不会删除并重新添加任何列:

    USE [$(DatabaseName)];
    
    
    GO
    PRINT N'Dropping Default Constraint unnamed constraint on [dbo].[TableA]...';
    
    
    GO
    ALTER TABLE [dbo].[TableA] DROP CONSTRAINT [DF__TableA__ABitColu__24927208];
    
    
    GO
    PRINT N'Creating Default Constraint [dbo].[DF_TableA_ABitColumn]...';
    
    
    GO
    ALTER TABLE [dbo].[TableA]
        ADD CONSTRAINT [DF_TableA_ABitColumn] DEFAULT ((1)) FOR [ABitColumn];
    
    
    GO
    PRINT N'Update complete.';
    
    • 2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve