从本地数据库表

时间:2015-10-27 14:30:03

标签: sql sql-server database

我遇到问题,我使用SQL Server 2014.我需要将数据从本地表复制到远程服务器上的相同表。现在,我只能将静态数据插入远程表,从远程表中选择数据,但我没有做我想做的事。

这是我的sql代码

IF OBJECT_ID('tempdb..##TempTable') IS NOT NULL
     DROP TABLE ##TempTable

CREATE TABLE ##TempTable 
(
    [Name] [nvarchar](255) NOT NULL,
    [Description] [nvarchar](512) NOT NULL,
    [ARXUrl] [nvarchar](1000) NOT NULL,
    [IsDeleted] [bit] NULL,
    [CreatedDate] [datetime] NOT NULL
);
GO

INSERT INTO ##TempTable 
    SELECT 
        [Name], [Description], [ARXUrl], [IsDeleted], [CreatedDate]
    FROM [dbo].[ARXSystem]
GO

-- destination database
:SETVAR remoteDB [slic-test]
:CONNECT someserver.net\SQLEXPRESS2014 -U user -P password
--source database
USE [SLIC]
GO 

SELECT * 
FROM ##TempTable;

INSERT INTO $(remoteDB).[dbo].[ARXSystem]
    SELECT * 
    FROM #TempTable
GO

这是我收到的消息

  

(1行受影响)
  连接到someserver.net \ SQLEXPRESS2014作为SLIC ...
  消息208,级别16,状态0,行22   无效的对象名称' ## TempTable'。
  断开与someserver.net \ SQLEXPRESS2014的连接作为SLIC ...

2 个答案:

答案 0 :(得分:3)

您需要通过Openquery或Openrowset使用远程服务器,这可能需要在执行查询的源系统上更改服务器配置。要将数据从源推送到目标,查询将如下所示:

INSERT INTO OPENROWSET('SQLNCLI',
'Server=someserver.net\SQLEXPRESS2014;User=xxxx;Password=xxxx;',
'SELECT [Name], [Description], [ARXUrl], [IsDeleted], [CreatedDate]
FROM [slic-test].[dbo].[ARXSystem]')
SELECT [Name], [Description], [ARXUrl], [IsDeleted], [CreatedDate]
FROM [dbo].[ARXSystem]

OPENROWSET文档可在此处找到:https://msdn.microsoft.com/en-us/library/ms190312.aspx

答案 1 :(得分:-1)

您的SQL创建一个表,但它不是临时表。它将在活动数据库中创建它。你需要使用像

这样的东西
DECLARE @temptable TABLE 
   (
    [Name] [nvarchar](255) NOT NULL,
    [Description] [nvarchar](512) NOT NULL,
    [ARXUrl] [nvarchar](1000) NOT NULL,
    [IsDeleted] [bit] NULL,
    [CreatedDate] [datetime] NOT NULL
   )

然后在切换数据库之后,您可以使用

引用该表
 INSERT INTO $(remoteDB).[dbo].[ARXSystem]
             SELECT * FROM @temptable
 GO

希望这会有所帮助