当前位置: 首页 > 面试题库 >

交换MS-SQL表

裴育
2023-03-14
问题内容

我想以最佳方式交换到表。
我有一个IpToCountry表,我每周根据导入的外部CSV文件创建一个新表。

我发现进行切换的最快方法是执行以下操作:

sp_rename IpToCountry IpToCountryOld
go
sp_rename IpToCountryNew IpToCountry
go

这样做的问题是,表之间仍可能会被访问​​。
如何在SQL中解决此问题?
考虑使用sp_getapplock和sp_releaseapplock,但是我想尽可能快地从表函数中读取数据。


问题答案:

假设您无法更新/插入现有表,为什么不使用视图包装对表的所有访问权限呢?

例如,您可能最初将数据存储在名为 IpToCountry20090303 的表中,并且视图将如下所示:

CREATE VIEW IpToCountry
AS
SELECT * FROM IpToCountry20090303

输入新数据后,您可以创建并填充 IpToCountry20090310 表。填充表格后,只需更新您的视图即可:

ALTER VIEW IpToCountry
AS
SELECT * FROM IpToCountry20090310

切换将完全是原子的,不需要任何显式的锁定或事务。更新视图后,您可以简单地删除旧表(或根据需要保留它)。



 类似资料:
  • 问题内容: 我有三个表: 1)应用程序(AppId,名称) 2)屏幕(ScreenId,名称) 3)关系(AppId,ScreenId) 现在,我想对相关表施加一些限制:可以将同一屏幕分配给多个应用程序,但是不能将两个具有相同名称的屏幕分配给同一应用程序。 我知道我可以将Screen.Name添加到关系表中,然后在AppId和Screen.Name上创建PK,但是我不希望这样的解决方案,因为Scr

  • 问题内容: 我正在使用SQL Server 2008,并且希望将数据转换为: 资料集: 所需结果: 目前,我正在执行以下操作,然后将所需的列粘贴到Excel中: 但是,并非所有匹配的行都不能仅仅并排击打表。对于没有Result的列,我希望显示NULL来填充行以使它们都具有相同数量的记录。 我查了一下PIVOT,但我认为这在这里不起作用…这种数据转换称为什么类型?我不认为这是交叉表… 谢谢! 问题答

  • 我正在编写一个C#程序,将MS SQL Server2008R2中的一个表中的所有数据复制到MySQL中的一个表中。我正在使用,并从第一个表中用以下代码填充它: +----------------------------------------------------------------------------------------------------------------------

  • 问题内容: 我在这里面临着新的挑战。我似乎找不到从MySQL(在Linux机器上运行到MS SQL Server)的复制优先级。 有人做过吗? 最重要的是,对MySQL数据库所做的所有更改都应实时或关闭在MS数据库上复制。MS数据库不太可能以任何其他方式更新,因此不需要双向工具。 我认为一种方法是从二进制日志中读取更改。有人解析过吗? 感谢您的帮助。 问题答案: MySQL中的触发器可用于捕获更改

  • 问题内容: 我有两个表: 和 我想为第一个表中的每个员工创建一个循环,以便可以将虚假数据插入第二个表中。 我试图通过循环使其实现,但无法实现,因此MS SQL Server中是否存在循环? 问题答案: 使用以下语句: 您可以通过添加以下内容来检查记录是否存在,然后再插入:

  • 我正在开始学习MSSQLServer的PDO。连接此代码: 现在,我从表中选择数据: 当我进入浏览器时,会出现以下错误: SQLSTATE[HY000]:一般错误:10007 Unicode纯归类中的Unicode数据或ntext数据不能使用DB-库(如ISQL)或ODBC版本3.7或更早版本发送到客户端。[10007](严重性5)[(空)]D:\www\sklad_new\inc\auth.ph