SQL链接表,INSERT INTO& JOIN的

时间:2012-07-17 14:43:36

标签: sql join linked-server insert-into

我是新人所以请保持温柔。

使用SQL Server 2008r2根据从另一台服务器上较大的专有SQL数据库中提取的信息创建工作数据库。我可以使用INSERT INTO函数将信息提取到新表中,但是当我尝试通过连接从链接数据库上的另一个表添加链接字段时,我无处可去。没有进一步的麻烦,这是我的所有新生荣耀的问题:

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]

我确信我犯的是一个非常的noob错误,但我继续在“ON”行上获得“Msg 4104”,并在第一行上获得“Msg 209”(不明确的列名'CustNo')选择陈述。

我已经在不同的论坛上对很多相关帖子进行了整理,并且通过我的帐户,这应该可行。你们其中一个人可以向这个菜鸟点亮吗?

提前谢谢。

3 个答案:

答案 0 :(得分: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]

但您还需要指定每个列来自哪个表。例如,[CustNo]中的SELECT位于两个表中,您需要哪一个?

答案 1 :(得分: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]

答案 2 :(得分:0)

两张桌子都有custno。您应该在它之前使用Customer.CustNo来标识源表:

select Customer.CustNo, . . .

显然,表之间没有其他列重复。通常,在进行连接时,最好在所有引用的列(任何地方)之前加上它们的源表。