2008-09-09 72 views
2

對於T-SQL和SQL 2005,我還是比較新的。我需要將database1中的表中的整數列導入到相同的表中(僅缺少我需要的列) DATABASE2。兩者都是sql 2005數據庫。我已經嘗試了Server Management Studio中的內置導入命令,但它迫使我複製整個表。這會導致由於約束和'只讀'列造成的錯誤(無論'只讀'在sql2005中意味着什麼)。我只想抓住一個列並將其複製到一個表格中。SQL 2005在數據庫之間複製單列

必須有一個簡單的方法來做到這一點。喜歡的東西:

INSERT INTO database1.myTable columnINeed 
SELECT columnINeed from database2.myTable 

回答

5

插入不會這樣做,因爲它會嘗試在表的末尾插入新行。聽起來你想要做的是在現有行的末尾添加一列。

我不確定語法是否完全正確,但如果我理解了你,那麼這將會做你以後的事情。

  1. 創建允許數據庫2中的空值的列。

  2. 執行更新:

    UPDATE database2.dbo.tablename SET database2.dbo.tablename.colname = database1.dbo.tablename.colname FROM database2.dbo.tablename INNER JOIN database1.dbo.tablename ON database2.dbo.tablename.keycol = database1.dbo.tablename.keycol

0

INSERT INTO Test2.dbo.MyTable(myvalue的)選擇myvalue的從Test1.dbo.MyTable

這是假設很大。首先,目標數據庫是空的。其次,其他列可以爲空。您可能需要更新。要做到這一點,你需要有一個共同的密鑰。

2

只要兩個數據庫位於同一臺服務器上,就有一種非常簡單的方法。完全限定的名稱是dbname.owner.table - 通常所有者是dbo,並且存在「.dbo」的快捷方式。這是...「,所以...

INSERT INTO Datbase1..MyTable 
    (ColumnList) 
SELECT FieldsIWant 
    FROM Database2..MyTable 
1

您也可以使用遊標。假設你想要遍歷所有記錄在第一表和填充新行的第二個表,然後像這將是要走的路:

DECLARE @FirstField nvarchar(100) 

DECLARE ACursor CURSOR FOR 
SELECT FirstField FROM FirstTable 

OPEN ACursor 
FETCH NEXT FROM ACursor INTO @FirstField 
WHILE @@FETCH_STATUS = 0 
BEGIN 

    INSERT INTO SecondTable (SecondField) VALUES (@FirstField) 

    FETCH NEXT FROM ACursor INTO @FirstField 

END 

CLOSE ACursor 
DEALLOCATE ACursor 
2

首先創建列,如果它不存在:

ALTER TABLE database2..targetTable 
ADD targetColumn int null -- or whatever column definition is needed 

由於您使用的是Sql Server 2005,因此您可以使用新的MERGE語句。 MERGE聲明的優點是能夠在一條語句中處理所有情況像來自源的缺失行(可以插入),缺少來自目標的行(可以執行刪除),匹配行(可以執行更新)以及所有內容是在一次交易中完成的。例如:

MERGE database2..targetTable AS t 
USING (SELECT sourceColumn FROM sourceDatabase1..sourceTable) as s 
ON t.PrimaryKeyCol = s.PrimaryKeyCol -- or whatever the match should be bassed on 
WHEN MATCHED THEN 
    UPDATE SET t.targetColumn = s.sourceColumn 
WHEN NOT MATCHED THEN 
    INSERT (targetColumn, [other columns ...]) VALUES (s.sourceColumn, [other values ..]) 

MERGE語句就是爲解決像你這樣的情況下,我建議使用它,這比使用多個SQL批處理報表解決方案,基本上完成同樣的事情MERGE確實在一個聲明中沒有添加更強大複雜。

+0

有趣。我不知道合併。涼 – 2008-09-10 18:51:40

1

MERGE僅適用於SQL 2008 NOT SQL 2005