我想将一个表(称为此表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 table
和source table
驻留在同一个数据库中。
最糟糕的情况是,我可以将dest table
复制到同一服务器上的另一个数据库并跨数据库进行查询。如果存在在同一数据库上完成此操作的选项,我宁愿避免被迫使用两个单独的数据库。
答案 0 :(得分:1)
你不能。不是没有别名和其他技巧。
答案 1 :(得分:0)
如果您不介意查询表稍微落后于源表,为什么不创建一个存储过程:
然后只计划一个任务每小时运行一次存储过程,或者经常要更新查询表(即每4小时一次,每30分钟一次等)。
SQL Server非常快速地将一个表的内容复制到另一个表中。首先截断您的查询表本身将是一个非常快速的操作,并将防止重复记录。您可能只想考虑删除仅查询表,然后让SQL Server在插入源表的内容时构建仅查询表。那也很快。此select语句采用Select * Into ReadOnlyTable From SourceTable
的形式。您可以使用搜索词" SQL Select Into语句"在您最喜欢的搜索引擎中查找更多信息。 (或者只是转到http://www.w3schools.com/sql/sql_select_into.asp并在那里阅读它,如果你不想被谷歌搜索打扰它。)