我正在使用Microsoft SQL Server Management Studio,并且无需视图所依赖的原始表即可访问大量视图。我已将此视图中的一些数据复制到一个文件中,并希望将其导入我在本地创建的数据库中进行一些分析。
执行此操作的蛮力方法是手动记下查看视图中列的CREATE TABLE
语句,但有更好的方法来获取CREATE
或CREATE VIEW
我可以直接用于在localhost
中重新创建类似表的声明吗?
答案 0 :(得分:2)
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
。同样,最小化数据库锁定。