表复制在同一个数据库中

时间:2015-06-26 19:48:15

标签: sql-server replication

我想将一个表(称为此表source table)复制到同一数据库中的只读表(称为此表dest table)。我只找到了有关跨不同数据库发布和订阅的信息。是否可以在Microsoft SQL Server支持的同一数据库中复制表?

这需要源于这样一个事实:我们有一个非常复杂且不易改变的过程,它将记录更新并插入source table,并且由于创建了这个过程,我们开发了一个查询source table,导致间歇性冲突(即我们更新source table的进程在其他查询运行时暂时被阻止)。我们需要避免这些阻止/延迟我们的过程。我们对source table的查询总是优先级较低。

在索引列上查询针对source table运行的所有查询,以获得速度/效率和最小表锁定,并且针对source table运行的大多数查询都已完成{{1}提示同样的原因。然而,我们仍然遇到锁定问题,这些问题延迟了我们更新并将新记录插入with (nolock)的过程。

基于我所阅读的有关事务复制的所有内容,这应该允许我们在不锁定source table的情况下尽可能多地查询dest table。我对复制的了解是,我希望我的source tablesource table驻留在同一个数据库中。

最糟糕的情况是,我可以将dest table复制到同一服务器上的另一个数据库并跨数据库进行查询。如果存在在同一数据库上完成此操作的选项,我宁愿避免被迫使用两个单独的数据库。

2 个答案:

答案 0 :(得分:1)

你不能。不是没有别名和其他技巧。

答案 1 :(得分:0)

如果您不介意查询表稍微落后于源表,为什么不创建一个存储过程:

  1. 截断仅查询表。
  2. 将源表插入到仅查询表中。
  3. 然后只计划一个任务每小时运行一次存储过程,或者经常要更新查询表(即每4小时一次,每30分钟一次等)。

    SQL Server非常快速地将一个表的内容复制到另一个表中。首先截断您的查询表本身将是一个非常快速的操作,并将防止重复记录。您可能只想考虑删除仅查询表,然后让SQL Server在插入源表的内容时构建仅查询表。那也很快。此select语句采用Select * Into ReadOnlyTable From SourceTable的形式。您可以使用搜索词" SQL Select Into语句"在您最喜欢的搜索引擎中查找更多信息。 (或者只是转到http://www.w3schools.com/sql/sql_select_into.asp并在那里阅读它,如果你不想被谷歌搜索打扰它。)