2013-03-26 68 views
3

我有一个简单的SQL在生产数据库发现约3000行:如何将数据从一张表复制到另一台服务器上的另一张表中?

SELECT * 
FROM [CONTOSO].[BATID] (NOLOCK) 
WHERE COMPANYNO = 1 
AND MEASURINGPOINT = '592-98901_NPT' 
AND TIMESERIESNO = 1 
AND DATE_TIME >= '2013-01-31 23:00:00' 
AND DATE_TIME <= '2013-02-28 22:59:00' 
ORDER BY DATE_TIME 

有一些办法,我可以输出转换成某种形式的大“INSERT INTO ....'-的SQL会将这些数据插入到同一个表中。然后我可以轻松地将sql复制到其他SQL Server Management Studio窗口并执行它。

+1

目前最简单的,如果你有机会(并允许),这样做,是为了链接两台服务器,然后只需使用普通的插入即可。 – 2013-03-26 14:51:21

回答

3

如果您的服务器连接不上,你可以使用SSMS import/ export wizard。此导出将创建一个数据文件,然后您可以在远程服务器上导入该文件。

+0

谢谢。目前这是我正在寻找的。我在Notepad ++中做了一些格式化处理,将每一行转换成一个'INSERT INTO ...'行。 – 2013-03-26 15:10:13

+0

不是一个屁股,但是如果你写了“编写代码的代码”,那么将来你可以绕过你在记事本++中做的手动步骤。我想这取决于这是一次性还是你一定要做的事情。它更容易调整“代码写入代码”恕我直言。 – granadaCoder 2013-03-26 15:13:06

2

使用INSERT INTO..SELECT

INSERT INTO TableName (collName1, colName2,...) 
SELECT * -- this should match to the names of column define in the INSERT clause 
FROM [CONTOSO].[BATID] (NOLOCK) 
WHERE COMPANYNO = 1 
AND MEASURINGPOINT = '592-98901_NPT' 
AND TIMESERIESNO = 1 
AND DATE_TIME >= '2013-01-31 23:00:00' 
AND DATE_TIME <= '2013-02-28 22:59:00' 
+0

不确定这是否行得通 - 假设您可以在运行SQL时看到其他服务器的访问权限。 – 2013-03-26 14:34:01

1

如果创建表的选择可在你的SQL的版本,那么你可以使用这个:

Create table tab_name AS 
SELECT... your query... 
0

您可以编写创建代码的代码。

我已经做到了为这里的‘的MembershipProvider’数据库: http://granadacoder.wordpress.com/2007/11/29/membershipprovider-helper-to-transfer-data/

您可以修改,以满足您的需求。

观看双引号和单引号,他们会在计划中抛出一只猴子扳手。

这是更大的代码示例的预览:

注意,它会创建一个可以在第二个SQL服务器上运行的代码。

select 
    'INSERT INTO dbo.aspnet_Applications (ApplicationName,LoweredApplicationName,ApplicationId,[Description]) values (' as [--Comment], 
    char(39) + t1.ApplicationName + char(39) , ',' , 
    char(39) + t1.LoweredApplicationName + char(39) , ',' , 
    char(39) + convert(varchar(38) , t1.ApplicationId) + char(39) , ',' , 
    char(39) + t1.Description + char(39) 
    , ')' 
    FROM 
     dbo.aspnet_Applications t1 

这里是一个罗斯文例如,处理的公司名称和地址列单引号,并具有“哪里都不存在”对的PrimaryKey检查。请注意,此表没有任何整数/数字,但只需删除单引号即可。如果您想检查空值,这是传真列中看到的一个简单的案例陈述。你

Select 'INSERT INTO dbo.Customers (CustomerID,CompanyName,ContactName,ContactTitle,[Address],City,Region,PostalCode,Country,Phone,Fax) ' as [--Comment], 
'SELECT ' , 
char(39) + t1.CustomerID + char(39) , ',' , 
char(39) + REPLACE(t1.CompanyName , char(39) , char(39) + '+' + 'char(39)' + '+' + char(39)) + char(39) , ',' , 
char(39) + t1.ContactName + char(39) , ',' , 
char(39) + t1.ContactTitle + char(39) , ',' , 
char(39) + REPLACE(t1.[Address] , char(39) , char(39) + '+' + 'char(39)' + '+' + char(39)) + char(39) , ',' , 
char(39) + t1.City + char(39) , ',' , 
char(39) + t1.Region + char(39) , ',' , 
char(39) + t1.PostalCode + char(39) , ',' , 
char(39) + t1.Country + char(39) , ',' , 
char(39) + t1.Phone + char(39) , ',' , 
Fax = case 
    when t1.Fax is null then 'null' 
    else char(39) + t1.[Fax] + char(39) 
    end 
, ' Where not exists (select null from dbo.Customers innerC where innerC.CustomerID = ' + char(39) + t1.CustomerID + char(39) + ')' 
FROM 
dbo.Customers t1 
0

还可以创建Linked Server,然后从一个表中的数据复制到链接服务器上的另一个表。

sp_addlinkedserver 
    @server= N'NameofLinkedServer', 
    @srvproduct= N'', 
    @provider= N'SQLNCLI', 
    @datasrc= N'YourRemoteServer'; 

sp_addlinkedsrvlogin 
    @rmtsrvname = 'NameofLinkedServer' , 
    @useself = 'FALSE' , 
    @locallogin = 'local_login' , 
    @rmtuser = 'remote_login' , 
    @rmtpassword = 'remote_password' 

创建Linked Server后执行此INSERT语句

INSERT [NameofLinkedServer].[your_databaseName].[CONTOSO].[BATID](Column1, Column2, ...) 
SELECT (Column1, Column2, ...) 
FROM [CONTOSO].[BATID] (NOLOCK) 
WHERE COMPANYNO = 1 
AND MEASURINGPOINT = '592-98901_NPT' 
AND TIMESERIESNO = 1 
AND DATE_TIME >= '2013-01-31 23:00:00' 
AND DATE_TIME <= '2013-02-28 22:59:00' 
ORDER BY DATE_TIME 

有关详细信息,请参阅MSDN docs

相关问题