Sql server 适合这个问题/主题-但是任何阅读它的人都应该知道这是一个很好的建议,因此我对答案投赞成票,但这条评论。这似乎是一个非常具体的解决方案,适用于您的用例,但总体来说不是很好-如果在您转移到更大更好的项目后,我进行了一次真正的删除-然后突然发现我比删除之前有更多

Sql server 适合这个问题/主题-但是任何阅读它的人都应该知道这是一个很好的建议,因此我对答案投赞成票,但这条评论。这似乎是一个非常具体的解决方案,适用于您的用例,但总体来说不是很好-如果在您转移到更大更好的项目后,我进行了一次真正的删除-然后突然发现我比删除之前有更多,sql-server,sql-server-2008,linked-server,Sql Server,Sql Server 2008,Linked Server,适合这个问题/主题-但是任何阅读它的人都应该知道这是一个很好的建议,因此我对答案投赞成票,但这条评论。这似乎是一个非常具体的解决方案,适用于您的用例,但总体来说不是很好-如果在您转移到更大更好的项目后,我进行了一次真正的删除-然后突然发现我比删除之前有更多的行,因为您运行了同步?这是一个噩梦,要知道为什么会有一个删除触发器。这个解决方案主要是确保远程服务器与本地服务器匹配,并且可以从本地服务器上的作业触发。这不是一件双向的事情。它说的基本上是跟在我后面回答的两个人说的一样。推得慢,拉得快。自从我


适合这个问题/主题-但是任何阅读它的人都应该知道这是一个很好的建议,因此我对答案投赞成票,但这条评论。这似乎是一个非常具体的解决方案,适用于您的用例,但总体来说不是很好-如果在您转移到更大更好的项目后,我进行了一次真正的删除-然后突然发现我比删除之前有更多的行,因为您运行了同步?这是一个噩梦,要知道为什么会有一个删除触发器。这个解决方案主要是确保远程服务器与本地服务器匹配,并且可以从本地服务器上的作业触发。这不是一件双向的事情。它说的基本上是跟在我后面回答的两个人说的一样。推得慢,拉得快。自从我学会了如何使用远程存储过程以来,在过去的3年里,我已经不再使用delete触发器了。它避免了意外删除问题。如果远程服务器需要最新的信息,我会在运行时从本地拉一两条线,但大多数东西都不会有多大变化。这太棒了!
Insert into RemoteServer.RemoteDb..Remote_Table
select * from Local_Table (nolock)
INSERT INTO RemoteServer.RemoteDb..Remote_Table WITH(TABLOCK)
SELECT * FROM Local_Table WITH (nolock)
IDColumn (int, PK, Auto Increment)
TextColumn (varchar(30))
IntColumn (int)
IDColumn (int)
TextColumn (varchar(30))
IntColumn (int)
Create Trigger Table_Del
    On Table
    After Delete
AS
Begin
    Set NOCOUNT ON;

    Insert Into Table (IDColumn, TextColumn, IntColumn)
     Select IDColumn, TextColumn, IntColumn from MainServer.LocalDB.dbo.table L 
      Where not exists (Select * from Table R WHere L.IDColumn = R.IDColumn)

END
Insert Into LocalDB.dbo.Table (TextColumn, IntColumn) Values ('textvalue', 123);
Delete From RemoteServer.RemoteDB.dbo.Table Where IDColumn = 0;

--And if I want to clean the table out and make sure it has all the most up to date data:
Delete From RemoteServer.RemoteDB.dbo.Table
CREATE PROCEDURE [dbo].[UpdateTable]
    -- Add the parameters for the stored procedure here
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here

    --Fill Temp table
    Insert Into WebFileNamesTemp Select * From MAINSERVER.LocalDB.dbo.WebFileNames

    --Fill normal table from temp table
    Delete From WebFileNames
    Insert Into WebFileNames Select * From WebFileNamesTemp

    --empty temp table
    Delete From WebFileNamesTemp
END
EXEC sp_serveroption @server='REMOTESERVER', @optname='rpc', @optvalue='true'
EXEC sp_serveroption @server='REMOTESERVER', @optname='rpc out', @optvalue='true'
EXEC REMOTESERVER.RemoteDB.dbo.UpdateTable
EXEC sp_serveroption @server='REMOTESERVER', @optname='rpc', @optvalue='false'
EXEC sp_serveroption @server='REMOTESERVER', @optname='rpc out', @optvalue='false'
INSERT INTO Local_Table
SELECT * FROM RemoteServer.RemoteDb.Remote_Table
DECLARE @xml XML

SET @xml = (
        SELECT 'insert Remote_Table values (' + '''' + isnull(first_col, 'NULL') + ''',' +
            -- repeat for each col
            '''' + isnull(last_col, 'NULL') + '''' + ');'
        FROM Local_Table
        FOR XML path('')
        ) --This concatenates all the rows into a single xml object, the empty path keeps it from having <colname> </colname> wrapped arround each value

DECLARE @sql AS VARCHAR(max)

SET @sql = 'set nocount on;' + cast(@xml AS VARCHAR(max)) + 'set nocount off;' --Converts XML back to a long string

EXEC ('use RemoteDb;' + @sql) AT RemoteServer
    DECLARE @xml XML

    SET @xml = (select * from SourceTable FOR XML path('row'))

    Insert into TempTargetTable values (cast(@xml AS VARCHAR(max)))
DECLARE @X XML = (select '<toplevel>' + ImportString + '</toplevel>' from TempTargetTable)

DECLARE @iX INT
EXEC sp_xml_preparedocument @ix output, @x

insert into TargetTable
SELECT [col1],
       [col2]
FROM OPENXML(@iX, '//row', 2) 
WITH ([col1] [int],
       [col2] [varchar](128)
)

EXEC sp_xml_removedocument @iX
exec xp_cmdshell 'bcp "select * from YourLocalTable" queryout C:\CSVFolder\Load.csv -w -T -S .' 
exec xp_cmdshell 'bcp YourAzureDBName.dbo.YourAzureTable in C:\CSVFolder\Load.csv -S yourdb.database.windows.net -U youruser@yourdb.database.windows.net -P yourpass -q -w'