2012-07-17 68 views
1

我很新,所以請溫和。SQL鏈接表,INSERT INTO和JOINs

使用SQL Server 2008r2創建基於從另一臺服務器上更大的專有SQL數據庫中獲取的信息的工作數據庫。我能夠使用INSERT INTO函數將信息導入到新表中,但是當我嘗試通過聯接從鏈接數據庫的其他表中添加鏈接字段時,我無處可去。事不宜遲,這裏是我的一切newbish榮耀查詢:

INSERT INTO [Cust_Info].[dbo].[form_data] 
     (CustNo 
     ,LastName 
     ,FirstName 
     ,Add1 
     ,Add2 
     ,City 
     ,State 
     ,Zip 
     ,Phone1 
     ,Phone2 
     ,Email) 
SELECT  [CustNo] 
     ,[LastName] 
     ,[FirstName] 
     ,[Add1] 
     ,[Add2] 
     ,[City] 
     ,[State] 
     ,[Zip] 
     ,[Phone1] 
     ,[Phone2] 
     ,[Email] 

FROM [XYZ-SERVER-1\ETC].[Service].[dbo].[Customer] 
JOIN [XYZ-SERVER-1\ETC].[Service].[dbo].[EmailInv] 
ON [Cust_Info].[dbo].[form_data].[CustNo]=[XYZ-SERVER-1\ETC].[Service].[dbo]. 
[EmailInv].[CustNo] 

我相信,我想提出一個很小白的錯誤,但我仍然得到了「ON」線「消息4104」,且select語句第一行的「Msg 209」(不明確的列名'CustNo')。

我已在不同的論壇上通過許多相關帖子排序,通過我的帳戶,這應該工作。請問你們中的一位請看這個noob燈嗎?

預先感謝您。

回答

2

嗯,有一兩件事我注意到的是你正試圖INSERT INTO你的表[Cust_Info].[dbo].[form_data]但你不是JOINing在此表中JOIN聲明。所以你的JOIN語法看​​起來不正確。我猜你正在試圖JOIN這種方式,請注意,我用的別名:

INSERT INTO [Cust_Info].[dbo].[form_data] 
(
    CustNo 
    ,LastName 
    ,FirstName 
    ,Add1 
    ,Add2 
    ,City 
    ,State 
    ,Zip 
    ,Phone1 
    ,Phone2 
    ,Email 
) 
SELECT [CustNo] -- which table is this from select the alias? 
    ,[LastName] 
    ,[FirstName] 
    ,[Add1] 
    ,[Add2] 
    ,[City] 
    ,[State] 
    ,[Zip] 
    ,[Phone1] 
    ,[Phone2] 
    ,[Email] 

FROM [XYZ-SERVER-1\ETC].[Service].[dbo].[Customer] c 
JOIN [XYZ-SERVER-1\ETC].[Service].[dbo].[EmailInv] e 
    ON c.[CustNo]=e.[CustNo] 

,但你還需要指定哪個表,每一列的來源。例如,SELECT中的[CustNo]有兩個表格,您需要哪一個表格?

+0

這個伎倆。將ALIAS分配給Customer和EmailInv表,並分別在SELECT語句C或E中的所有字段之前。我的最後一行是:FROM [XYZ-SERVER-1 \ ETC]。[Service]。[dbo]。[Customer] AS C INNER JOIN [XYZ-SERVER-1 \ ESC]。[Service]。[dbo]。 [EmailInv] AS E ON C. [CustNo] = E [CustNo]現在只需要讓數據合作。 :) 再次感謝! – 2012-07-17 15:17:12

+0

@HLGEM感謝您的編輯,顯然在發佈之前我沒有完全重讀。 :) – Taryn 2012-07-17 15:17:20

0

您在兩個表中都有custno。你應該Customer.CustNo之前它來識別源表:

select Customer.CustNo, . . . 

顯然,沒有其他列的表之間複製。通常,在進行連接時,將所有引用列(任意位置)與其源表前面放在一起是一個好主意。

+0

我會記住這一點以備將來查詢。謝謝! – 2012-07-17 15:05:55

1

這是因爲CustNo是兩個表中的字段,所以SQL不知道選擇哪一個。

嘗試:

INSERT INTO [Cust_Info].[dbo].[form_data] 
     (CustNo 
     ,LastName 
     ,FirstName 
     ,Add1 
     ,Add2 
     ,City 
     ,State 
     ,Zip 
     ,Phone1 
     ,Phone2 
     ,Email) 
SELECT  [Customer].[CustNo] 
     ,[LastName] 
     ,[FirstName] 
     ,[Add1] 
     ,[Add2] 
     ,[City] 
     ,[State] 
     ,[Zip] 
     ,[Phone1] 
     ,[Phone2] 
     ,[Email] 

FROM [XYZ-SERVER-1\ETC].[Service].[dbo].[Customer] 
JOIN [XYZ-SERVER-1\ETC].[Service].[dbo].[EmailInv] 
ON [Cust_Info].[dbo].[form_data].[CustNo]=[XYZ-SERVER-1\ETC].[Service].[dbo]. 
[EmailInv].[CustNo] 
+1

感謝您的快速回復。這接近需要!非常感謝! – 2012-07-17 15:05:11

+0

我想知道爲什麼我收到downvote。 Downvoter,請發表評論 – 2012-07-17 15:26:25

+0

@duke_of_dork爲什麼這個答案是「接近」,不正確的你?這是一個Join,所以CustNo字段在兩個表中都是相同的。你不知道哪一個你選擇 – 2012-07-17 15:31:22