2014-01-27 62 views
0

我正在開發服務器上工作名爲SQLDEV01,db名稱爲University,表名爲cse.students。在我對錶cse.students的工作中,我丟失了一些行,所以我需要從生產server.production服務器名稱的所有確切數據是SQLPROD01如何將表格從生產複製到開發?

如何在不使用SSIS的情況下查詢獲取生產數據?

+0

有多少行,你在這個表中有生產? –

+0

將其添加爲鏈接服務器?然後你可以直接查詢(從SQLPROD01.University.cse.students插入cse.students select *)http://msdn.microsoft.com/en-us/library/ff772782.aspx#SSMSProcedure –

+0

@ peter.petrov.Nearly 2k行 – user3203331

回答

1

有一個幾種方法來做到這一點。一個幾乎是失敗安全的是:

在Microsoft SQL Management Studio中展開源服務器的服務器節點 - 然後展開數據庫節點。右鍵單擊源數據庫並選擇任務 - >生成腳本。彈出對話框時,點擊下一步。選擇「選擇特定數據庫對象」單選按鈕。展開Tables節點以檢查要複製的表格。點擊底部的下一個按鈕。點擊高級按鈕。在彈出腳本DROP和CREATE的選項中,選擇右側的腳本DROP和CREATE。對於選擇腳本的數據類型選擇右側的模式和數據。點擊確定。現在回到主對話框,您需要選擇「保存到剪貼板」或「保存到新的查詢窗口」。我通常選擇剪貼板,因爲我通常會選擇不同的服務器,但選擇最適合您的服務器。點擊下一步。再次點擊下一步,腳本將根據您的選擇生成。現在只需在目標數據庫上運行該腳本。

enter image description here

+0

這個腳本只是刪除表格並創建新表格。 – user3203331

+0

您是否選擇了「腳本數據類型」選項的「模式和數據」選項? –

+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命令創建ad-hoc連接。

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 

如果他(她)不允許,你被卡住物理鏈接服務器。

如果您使用代表團 - 選擇#3,您必須注意雙跳問題。

http://blogs.msdn.com/b/sql_protocols/archive/2006/08/10/694657.aspx

我會在生產特定帳戶有權選擇數據配置鏈接服務器。見選擇#4。

enter image description here

+0

:消息15281,級別16,狀態1,行1 SQL Server阻止訪問組件'Ad Hoc Distributed Queries'的STATEMENT'OpenRowset/OpenDatasource',因爲此組件作爲此服務器的安全配置的一部分被關閉。系統管理員可以使用sp_configure啓用'Ad Hoc Distributed Queries'。有關啓用「Ad Hoc分佈式查詢」的更多信息,請在SQL Server聯機叢書中搜索「Ad Hoc Distributed Queries」。 – user3203331

+0

如果您無法從SSMS - >鏈接服務器 - >表中瀏覽,則無法正確設置它。如果您仍然有問題,請回復。 –

+0

。感謝很多它幫助我 – user3203331

1

請更換您的輸入

使用此查詢廣義查詢

SELECT *成targetTable從[sourceserver] [sourcedatabase] [DBO]。[sourceTable會]

+0

:用戶'NT AUTHORITY \ ANONYMOUS LOGON'登錄失敗。 – user3203331

+0

對於鏈接的服務器,需要設置正確的憑據。這是默認的匿名。 –

+0

@ashu:非常感謝ashu – user3203331