1

新参なのでお手柔らかにお願いします。

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]

私は非常に初心者の間違いを犯していると確信していますが、「ON」行に「Msg 4104」が表示され続け、select ステートメントの最初の行に「Msg 209」(あいまいな列名「CustNo」) が表示されます。 .

さまざまなフォーラムで関連する多くの投稿を整理しましたが、私のアカウントではこれでうまくいくはずです。あなたの獣医の1人がこの初心者に光を見せてもらえますか?

前もって感謝します。

4

3 に答える 3

2

さて、私が気づいたことの 1 つは、あなたがINSERT INTO自分のテーブルにアクセスしようとしているのに、ステートメントでこのテーブルに[Cust_Info].[dbo].[form_data]いないことです。したがって、JOIN 構文は正しくないようです。このようにしようとしていると思いますが、エイリアスを使用していることに注意してください。JOINingJOINJOIN

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]SELECT2 つのテーブルにありますが、どちらが必要ですか?

于 2012-07-17T14:49:52.297 に答える
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]
于 2012-07-17T14:47:28.113 に答える
0

両方のテーブルに custno があります。ソース テーブルを識別するために、前に Customer.CustNo を付ける必要があります。

select Customer.CustNo, . . .

どうやら、テーブル間で重複する他の列はありません。一般に、結合を行うときは、すべての参照列 (任意の場所) の前にソース テーブルを配置することをお勧めします。

于 2012-07-17T14:46:23.230 に答える