2012-06-14 108 views
1

所以我試圖從數據庫表複製一些數據到另一個。問題是,目標數據庫表有2個需要的新列。我想在SQL Server Management Studio上使用導出/導入嚮導,但是如果我使用該向導,則需要爲每個表編寫一個查詢,而且我一次只能執行一個查詢。想知道是否有更有效的方法來做到這一點。複製表數據並填充新列

這裏的1個表的一個例子:

dbase1.dbo.Appointment { id, name, description, createdate } 
dbase2.dbo.Appointment { id, name, description, createdate, auditby, auditat} 

我一共8代表與2個的附加列。並且他們中的大多數通過fk與彼此相關,所以我想使用嚮導來確定哪個表首先被插入。問題是,它只適用於「從一個或多個表中複製數據」而不是「寫入指定數據的查詢」(我用它來填充這兩個新列)。

我一直在做數據複製,因爲我使用MVC代碼第一次爲我申請這個非常緩慢的過程,我沒有對服務器的訪問,以便能夠下降,在我的閒暇創建表。所以我不得不求助於這個來維護我已有的數據。

+0

兩個新字段是否允許空值?如果是,那麼您可以嘗試嵌套插入查詢。像這樣:INSERT INTO dbase2.dbo.Appointment VALUES(SELECT * FROM dbase1.dbo.Appointment)。這種類型的查詢確實對我有用了好幾次。希望它也能幫助你。 –

+0

8不是很多。你可不看8列表並自行確定他們需要處理的訂單嗎? –

+1

@ V.P.Verma您在評論中發佈的查詢將無法使用。 –

回答

1

一個想法:暫時禁止在目標數據庫中的外鍵約束。然後,無論您運行插入的順序如何,都無關緊要。爲了填充兩個新的和必需的列,你只需要選擇一些股票價值放在那裏(因爲顯然這些行最初不受初始審計)。例如:

INSERT dbase2.dbo.appointment 
(id, name, description, createdate, auditby, auditat) 
    SELECT id, name, description, createdate, 
    auditby = 'me', auditat = GETDATE() 
    FROM dbo.appointment; 

因爲它似乎在挑戰僅僅是目標要求是不是在源列,並且您需要確定哪些應該在這些審計列進行填充,這似乎一次解決多個問題。你只需要弄清楚該放什麼,而不是'me'GETDATE()。 (要讓嚮導爲你抽出這8個表格,你可能會創建一個類似於上述查詢的選擇部分的視圖,但這是更多的工作,它不會看到底層的FK約束以正確的順序生成它們反正)

+0

讓我快速嘗試一下。所以我應該直接寫下查詢,而不是嚮導。這將是我第一次做這樣的事情,所以忍受我和我的noob問題。 :) – gdubs

0

寫出每個你想要的順序插入過程的SQL查詢。這將是最簡單的方法。

0

設置Default values對於這兩列

像AuditAt - 默認日期即GetDate() 對於AuditBy - 人物ID /名稱

現在,你可以插入進入這些表格,而不用輸入這兩列

+0

只是好奇,誰說'auditby'列上有一個外鍵? –

+0

先生,我認爲,審計是一個用戶名,它應該是一個與用戶表的關係。 – Pankaj

+0

那應該是什麼,不一定是它是什麼。我其實只是問我是否在這個問題上漏掉了一些東西;我不認爲這是你告訴OP的地方,他需要在該桌上使用外鍵。例如,他是否應該將每個可能的Windows身份驗證登錄存儲在表中? –