簡體   English   中英

在 SQL Server 中將表從一個數據庫復制到另一個數據庫

[英]Copy tables from one database to another in SQL Server

我有一個名為 foo 的數據庫和一個名為 bar 的數據庫。 我在 foo 中有一個名為 tblFoobar 的表,我想將(數據和所有)從數據庫 foo 移動到數據庫 bar。 執行此操作的 SQL 語句是什么?

SQL Server Management Studio 的“導入數據”任務(右鍵單擊數據庫名稱,然后單擊任務)將為您完成大部分工作。 從要將數據復制到的數據庫運行它。

如果表不存在,它會為您創建它們,但您可能必須重新創建任何索引等。 如果表確實存在,默認情況下它會附加新數據,但您可以調整它(編輯映射),以便刪除所有現有數據。

我一直在使用它,而且效果很好。

在 SQL Server 上? 並且在同一個數據庫服務器上? 使用三部分命名。

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

這只是移動數據。 如果要移動表定義(以及其他屬性,例如權限和索引),則必須執行其他操作。

這應該有效:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

不會復制約束、默認值或索引。 創建的表將沒有聚集索引。

或者你可以:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

如果您的目標表存在並且為空。

如果只有一張桌子,那么您需要做的就是

  • 腳本表定義
  • 在另一個數據庫中創建新表
  • 更新規則、索引、權限等
  • 導入數據(上面已經顯示了幾個插入示例)

您必須考慮的一件事是其他更新,例如將來遷移其他對象。 請注意,源表和目標表的名稱不同。 這意味着如果您依賴於諸如視圖、存儲過程等的對象,您還必須進行更改。

您可以手動處理一個或多個對象,而不會出現任何問題。 但是,當更新不止幾個時,第 3 方比較工具就派上用場了。 現在我正在使用ApexSQL Diff進行架構遷移,但使用任何其他工具都不會出錯。

  1. 在 management studio 中編寫create table腳本,在 bar 中運行該腳本以創建表。 (右鍵單擊對象資源管理器中的表,腳本表為,創建為...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

您還可以使用生成 SQL Server 腳本向導來幫助指導可以執行以下操作的 SQL 腳本的創建:

  • 復制表模式
  • 任何約束(身份、默認值等)
  • 表內數據
  • 如果需要,還有許多其他選擇

SQL Server 2008 的良好示例工作流, 此處顯示屏幕截圖。

您可以采用這種方式:(一般示例)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

此外,如果您還需要生成列名以放入插入子句,請使用:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')

復制結果並粘貼到查詢窗口以表示您的表列名稱,甚至這也會排除標識列:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0

請記住,如果數據庫屬於同一位置,則復制行的腳本將起作用。


你可以試試這個。

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

如果兩個數據庫位於同一服務器中,則服務器名稱是可選的。

我有一個名為foo的數據庫和一個名為bar的數據庫。 我在foo中有一個名為tblFoobar的表,我想將(數據和所有)表從數據庫foo移動到數據庫欄。 要執行此操作的SQL語句是什么?

我有一個名為foo的數據庫和一個名為bar的數據庫。 我在foo中有一個名為tblFoobar的表,我想將(數據和所有)表從數據庫foo移動到數據庫欄。 要執行此操作的SQL語句是什么?

我給你三個選擇:

如果它們是同一實例上的兩個數據庫,請執行以下操作:

SELECT  * INTO My_New_Table FROM [HumanResources].[Department];

如果它們是不同服務器上的兩個數據庫並且您有鏈接服務器,請執行以下操作:

SELECT  * INTO My_New_Table FROM [ServerName].[AdventureWorks2012].[HumanResources].[Department];

如果它們是不同服務器上的兩個數據庫並且您沒有鏈接服務器,請執行以下操作:

SELECT * INTO My_New_Table
FROM OPENROWSET('SQLNCLI', 'Server=My_Remote_Server;Trusted_Connection=yes;',
     'SELECT * FROM AdventureWorks2012.HumanResources.Department');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM