如何在SQL Server中将VIEW重新创建为本地表?

时间:2011-06-15 18:13:48

标签: sql sql-server sql-server-2008

我正在使用Microsoft SQL Server Management Studio,并且无需视图所依赖的原始表即可访问大量视图。我已将此视图中的一些数据复制到一个文件中,并希望将其导入我在本地创建的数据库中进行一些分析。

执行此操作的蛮力方法是手动记下查看视图中列的CREATE TABLE语句,但有更好的方法来获取CREATECREATE VIEW我可以直接用于在localhost中重新创建类似表的声明吗?

2 个答案:

答案 0 :(得分:2)

您的localhost中的

Create a linked server到此服务器。然后使用(连接到localhost时)

SELECT * INTO NewTableName FROM LinkedServer.DBName.SchemaName.View

将创建localhost中当前数据库中的新表。

答案 1 :(得分:1)

我通常更喜欢使用SSIS进行数据转换。包中的第一步是使用SELECT INTO ... WHERE 1=0来获取定义,这样它就不会带来任何数据并最小化锁定时间(SELECT INTO导致数据库范围的锁定)。然后,一旦得到包含源视图定义的结果表,则复制数据。

如果您担心视图的定义可能会发生变化,请坚持使用INSERT INTO ... SELECT * FROM SQL任务。否则,保存从上面的SQL中检索的定义并创建表(如果它尚不存在)。然后使用数据流任务来传输数据。

使用这些方法之一,您可以避免潜在的双跃点场景(如果您使用的是Windows身份验证)。如果您需要定期执行此操作,它也可以在SQL代理作业中重用。否则,它可能有点矫枉过正。

或者你可以在SSMS中运行第一部分,但我绝对建议使用WHERE 1=0然后使用INSERT INTO而不是直接SELECT INTO。同样,最小化数据库锁定。