我正在使用名为SQLDEV01
的开发服务器,数据库名称为University
,表名为cse.students
。在我对表cse.students的工作期间,我丢失了一些行,因此我需要从生产服务器获取所有确切数据。生产服务器名称为SQLPROD01
。
如何在不使用SSIS的情况下查询获取生产数据?
答案 0 :(得分:3)
在从SSMS执行以下操作之前,从开发服务器到生产服务器设置链接服务器。所有代码都应该在开发服务器上执行。
http://technet.microsoft.com/en-us/library/ms188279.aspx
-- On Development server [SQLDEV01]
TRUNCATE TABLE [University].[cse].[students];
GO
-- Use link server to move data
INSERT INTO
[University].[cse].[students]
SELECT
*
FROM
[SQLPROD01].[University].[cse].[students]
GO
这假设目标上没有标识列。
如果您有标识列,请在执行上述插入之前/之后打开/关闭允许插入。
-- Before Insert, execute this statement
SET IDENTITY_INSERT [University].[cse].[students] ON
GO
-- After Insert, execute this statement
SET IDENTITY_INSERT [University].[cse].[students] OFF
GO
您还可以使用OPENROWSET命令创建临时连接。
http://technet.microsoft.com/en-us/library/ms190312.aspx
INSERT INTO
[University].[cse].[students]
SELECT
PRD.*
FROM
OPENROWSET('SQLNCLI', 'Server=SQLPROD01;Trusted_Connection=yes;',
'SELECT * FROM [University].[cse].[students]') AS PRD;
我没有检查您的环境的语法,请检查。
如果将临时查询设置为关闭(0),请让DBA暂时将它们打开(1)。在生产服务器上执行以下操作。
http://msdn.microsoft.com/en-us/library/ms187569.aspx
-- Show all settings
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
-- What is the current setting?
sp_configure
GO
-- Allow add hoc queries
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
如果(s)他不允许这样做,你就会被物理链接服务器困住。
如果您使用委派 - 选项#3,则必须注意双跃点问题。
http://blogs.msdn.com/b/sql_protocols/archive/2006/08/10/694657.aspx
我会将链接服务器配置为具有选择数据权限的生产中的特定帐户。见选择#4。
答案 1 :(得分:1)
请使用此查询通用查询替换您的条目
从[sourceserver]中选择* into targetTable。[sourcedatabase]。[dbo]。[sourceTable]
答案 2 :(得分:1)
有几种方法可以做到这一点。一个非常安全的是以下内容:
在Microsoft SQL Management Studio中,展开源服务器的服务器节点 - 然后展开“数据库”节点。右键单击源数据库,然后选择任务 - >生成脚本。弹出对话框后单击“下一步”。选择“选择特定数据库对象”单选按钮。展开“表”节点,检查要复制的表。单击底部的下一个按钮。单击高级按钮。在弹出Script DROP和CREATE的选项中,选择右侧的Script DROP和CREATE。对于选项数据类型,脚本选择右侧的模式和数据。单击确定。现在回到主对话框,您需要选择“保存到剪贴板”或“保存到新查询窗口”。我通常选择剪贴板,因为我经常去不同的服务器,但选择最适合你的服务器。点击下一步。再次单击“下一步”,脚本将根据您的选择生成。现在只需在目标数据库上运行该脚本。