Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区分两个表的最快方法—一个在sql中,另一个在access中_C#_Sql Server_Ms Access - Fatal编程技术网

C# 区分两个表的最快方法—一个在sql中,另一个在access中

C# 区分两个表的最快方法—一个在sql中,另一个在access中,c#,sql-server,ms-access,C#,Sql Server,Ms Access,我正在编写一个TableDifference实用程序,用于检查access和SQLServer中类似模式表之间的差异。我想知道的是,实现这一目标的最快方法是什么,因为两个数据库中都有大量的表 我正在比较access和sql中的两个表,假设tableX具有相同的模式、相同的列定义和约束,并且表中有不同的行和元组。我想确定差异并提取差异 谢谢 Steave如果您只需要检查字段名和类型,ADO可能适合:。访问字段类型和SQL Server字段类型之间不会完全匹配。如果只需要检查字段名称和类型,ADO可

我正在编写一个TableDifference实用程序,用于检查access和SQLServer中类似模式表之间的差异。我想知道的是,实现这一目标的最快方法是什么,因为两个数据库中都有大量的表

我正在比较access和sql中的两个表,假设tableX具有相同的模式、相同的列定义和约束,并且表中有不同的行和元组。我想确定差异并提取差异

谢谢
Steave

如果您只需要检查字段名和类型,ADO可能适合:。访问字段类型和SQL Server字段类型之间不会完全匹配。

如果只需要检查字段名称和类型,ADO可能适合:。您将无法在访问字段类型和SQL Server字段类型之间获得精确的匹配。

不幸的是,听起来您希望在两个完全不同的系统之间进行非常细微的差异,这不利于提高效率


如果表不是太大,最好是导出到CSV(确保对结果进行排序!),并对它们运行diff命令。

不幸的是,听起来您希望在两个不同的系统之间进行非常精细的差异,这不允许有很大的效率


如果表不是太大,最好是导出到CSV(确保对结果排序!),并对其运行diff命令。

创建链接到ms access数据库的服务器,并使用查询来区分表:

EXEC sp_addlinkedserver @server = 'DBName'
                      , @provider = 'Microsoft.Jet.OLEDB.4.0'
                      , @srvproduct = 'OLE DB Provider for Jet'
                      , @datasrc = 'C:\myaccessdb.mdb'
使用这样的查询比较两个表是最简单的

SELECT MIN(table_name), column1, column2, ...
FROM (
  SELECT 'sql server table' , column1, column2, ...
  FROM A
  UNION ALL
  SELECT 'msaccess table' , column1, column2, ...
  FROM B) tmp
GROUP BY column1, column2, ...
HAVING COUNT(*) = 1

另一种选择是依赖Sql Server附带的
tablediff.exe
实用程序。请参见创建链接到ms access数据库的服务器,并使用查询来区分表:

EXEC sp_addlinkedserver @server = 'DBName'
                      , @provider = 'Microsoft.Jet.OLEDB.4.0'
                      , @srvproduct = 'OLE DB Provider for Jet'
                      , @datasrc = 'C:\myaccessdb.mdb'
使用这样的查询比较两个表是最简单的

SELECT MIN(table_name), column1, column2, ...
FROM (
  SELECT 'sql server table' , column1, column2, ...
  FROM A
  UNION ALL
  SELECT 'msaccess table' , column1, column2, ...
  FROM B) tmp
GROUP BY column1, column2, ...
HAVING COUNT(*) = 1

另一种选择是依赖Sql Server附带的
tablediff.exe
实用程序。请参见

是否要区分模式、行计数和行值?你需要多大程度的细节?这听起来像是:“我想建造一艘宇宙飞船,你能教我有关火箭科学的知识吗?”换句话说:你正在计划编写一个工具,但对核心功能一无所知?我更新了我的问题,伙计;很好的引用UWE,但我相信这是一个相当明显的问题我问的是最快的方法我知道如何做到这一点,但我想让专家就性能和速度方面的最快方法发表意见你想区分模式、行计数和行值吗?你需要多大程度的细节?这听起来像是:“我想建造一艘宇宙飞船,你能教我有关火箭科学的知识吗?”换句话说:你正在计划编写一个工具,但对核心功能一无所知?我更新了我的问题,伙计;很好的引用UWE,但我相信这是一个相当明显的问题我问的是最快的方法我知道如何做到这一点,但我想让专家评论一下最快的方法在性能和速度方面我更感兴趣的是元组差异,而不是模式差异模式在两个数据库中都是相同的我更感兴趣的是元组差异而不是模式差异模式在两个数据库中都是相同的。我还总结了相同的方法,将数据传输到csv,然后将csv文件与差异进行比较,即使有大文件,也可以工作。是的,它可以处理较大的文件/表。您可能会遇到网络传输问题,如果问题变得太大,也会出现类似的问题。您好,我也总结了相同的方法,将数据传输到csv,然后将csv文件与差异进行比较,即使有大文件,也可以工作。是的,它可以处理较大的文件/表格。如果网络传输问题变得太大,最终可能会出现这样的问题。