如何检查两个表是否在结构上相同?

时间:2017-11-17 08:33:39

标签: sql sql-server

我在SQL Server数据库中有两个表。我想检查这两个表是否在结构上相同。我使用UNION/ EXCEPT运算符来检查这一点,发现这两个表不相同。

以下是我的问题:

  1. 我们如何知道两个表的结构是否相同?

  2. 如果它们不相同,我们如何获得差异的细节?如果一个表中缺少一列,我们如何获取缺失列的名称?

  3. 如果这两个表中的列之间存在数据类型不匹配,我们是否可以获取具有不同数据类型的列的名称?

5 个答案:

答案 0 :(得分:1)

在SSDT中,您可以使用模式比较来查看列,表,数据类型等是否存在任何差异。

Schema Compare SSDT

如果你想用它编写代码。您可以查询information_schema目录

System Information Schema

答案 1 :(得分:0)

as @jarlh评论道。你可以在information_schema.columns中找到信息 或,
你可以使用这个名为 sql-dbdiff 的工具:https://code.google.com/archive/p/sql-dbdiff/

<小时/> 更多想法,您可以参与讨论:Easiest Way To Diff Two Table Schemas In SQL Server 2008?

答案 2 :(得分:0)

如果您使用的是Sql Server Management Studio,右键单击表名

上的
  

脚本表为&gt;创建

并且您获得了表的DDL,这只是在创建表时查看表的实用方法。当然,正如大家已经说过的那样,information_schema拥有你需要的所有信息。

答案 3 :(得分:0)

使用sys.dm_exec_describe_first_result_set,您可以获取有关表/查询中的列的信息...在此示例中,您可以看到如何比较列名,可为空性,数据类型和身份

SELECT DEV.name as DEV_ColumnName, 
PROD.name as PROD_ColumnName, 
DEV.is_nullable as DEV_is_nullable, 
PROD.is_nullable as PROD_is_nullable, 
DEV.system_type_name as DEV_Datatype, 
PROD.system_type_name as PROD_Datatype, 
DEV.is_identity_column as DEV_is_identity, 
PROD.is_identity_column as PROD_is_identity  
FROM sys.dm_exec_describe_first_result_set (N'SELECT * FROM dbo.TABLE1', NULL, 0) DEV 
FULL OUTER JOIN  sys.dm_exec_describe_first_result_set (N'SELECT * FROM dbo.TABLE2', NULL, 0) PROD 
ON DEV.name = PROD.name 

答案 4 :(得分:0)

您可以在这里比较表

如果要将表与同一数据库进行比较,只需提供相同的 i think you are going wrong in coding.. you should try like this way: 1 for set adapter- gridLayout = new GridLayoutManager(getActivity(), 2); recyclerView.setLayoutManager(gridLayout); adapter = new UpicksAdapter(getActivity(), upicks); 2. change data on click: botonbuscar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { upicks.clear(); // clear your list before adding new data String busqueda = txtbusqueda.getText().toString(); getUpicksBusquedaFromDB(0, busqueda); adapter.notifyDataSetChanged(); //for update list //-- Note-- Make sure your "adapter" instance will not be create "adapter = new .." again and again. } }); DATABASENAMESOURCE名称

DATABASENAMEDESTINATION