Sql 将数据从本地数据库表插入远程数据库表

Sql 将数据从本地数据库表插入远程数据库表,sql,sql-server,database,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, [Desc

我有一个问题,我使用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行受影响 正在作为SLIC连接到someserver.net\SQLEXPRESS2014。。。 Msg 208,16级,状态0,第22行 无效的对象名称“可诱惑”。 正在断开与someserver.net\SQLEXPRESS2014的连接作为SLIC


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

希望这将有助于

您需要通过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文档可在此处找到:

在创建临时表之前,您正在尝试从目标中的临时表中选择数据。您需要首先创建表并插入数据。临时表不会持久存在。此外,上次选择缺少一个临时表,甚至没有临时表。所使用的语句用于创建永久对象table@Takarii全局临时表是如何永久的?它们对每个人都可见,并且在所有引用它们的连接关闭时被删除。但在这种情况下,我认为不需要全局临时表,只需使用常规临时表即可。@RickS为什么需要永久临时表?我假设这些都嵌套在一个事务中。这样你就不需要每次都处理一张桌子了time@Takarii-断开/终止连接后,临时表不会持续存在。一旦会话终止并重新连接到远程服务器,您的数据就会消失。您不能将这样的连接更改嵌套到数据库事务中。您需要使用Openrowset或openquery。似乎它可以用于简单的示例。非常感谢。注意:对于SQLNCLI11,您必须使用UID和PWD,而不是用户和密码。